CF OBI 2023 - Programação Nível Júnior
Estante
Comentário por Henrique Vianna
Conhecimentos Prévios Necessários:
Nesse problema, queremos distribuir livros em
prateleiras de tal forma que todas elas tenham a mesma quantidade de livros, sendo que essa quantidade, que chamaremos de
, deve ser maximizada. Intuitivamente, cada uma das prateleiras receberá
livros, sobrando então
livros, que é exatamente igual a
. Note que comos os valores fornecidos podem ser grandes (até
), temos que ler nossas variáveis como long long.
Clique aqui para conferir o código
Pinguins
Comentário por Fernando Gonçalves
Conhecimentos Prévios Necessários:
Nesse problema, queremos comparar duas temperaturas para indentificar qual delas é menor. Essas temperaturas, porém, podem estar em unidades diferentes.
Desta forma, devemos colocá-las na mesma unidade de medida por meio da relação , sendo
e
as temperaturas em Celsius e em Fahrenheit, respectivamente.
Para evitar que tenhamos que usar números reais (que poderiam trazer imprecisões), podemos multiplicar ambos os lados por . Assim podemos ultilizar apenas inteiros.
Clique aqui para conferir o código
Suco
Escrito por Caique Paiva
Conhecimentos Prévios Necessários:
Primeiro, na solução, vamos contar a quantidade de sucos contaminados, chame esse valor de , e então, a quantidade de suco que Letícia vai poder tomar é
(Que é a quantidade de suco menos os sucos contaminados). Então, para contar a quantidade de sucos contaminados, basta fazer um for para passar por cada
da entrada, e caso
(Que significa que o suco não é de abacaxi com hortelã) e
(Que significa que o suco contém pedaços), então adicionamos
em
.
Clique aqui para ver o código.
Casquinha
Solução escrita por João Pedro Castro
Podemos exemplificar esse problema para: "ache o tamanho do maior intervalo contínuo dentro de um array com todos os valores distintos", e para resolver esse problema podemos usar a ideia de guardar a última posição que cada valor apareceu, e depois fazer contas simples para atualizar a maior quantidade de valores distintos em um intervalo terminando na posição atual.
Vamos usar a ideia de um array 1-indexado, e inicializar o vetor (ultima vez que um valor apareceu) como 0, e com o tamanho
. Também vamos criar uma variável com o tamanho do intervalo terminando na posição
atual, chamaremos esse valor de
. Agora, para cada valor
rodamos:
- Se
estiver dentro do intervalo atual (
), logo, adicionar ele de novo quebraria as regras:
, ou seja, tiramos do tamanho a parte que vai do começo até a última vez que
apareceu.
(o tamanho aumenta em 1, pois adicionamos o
ao final do intervalo)
Agora fica claro que a resposta vai ser o máximo entre todas as posições
.