CF-OBI 2023 PJ

CF OBI 2023 - Programação Nível Júnior

Estante

Comentário por Henrique Vianna

Conhecimentos Prévios Necessários:

Nesse problema, queremos distribuir X + Y + Z livros em N prateleiras de tal forma que todas elas tenham a mesma quantidade de livros, sendo que essa quantidade, que chamaremos de Q, deve ser maximizada. Intuitivamente, cada uma das prateleiras receberá Q = \lfloor \frac{X+Y + Z}{N} \rfloor livros, sobrando então X + Y + Z - Q * N livros, que é exatamente igual a (X + Y + Z) \% N. Note que comos os valores fornecidos podem ser grandes (até 10^{18}), 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 \frac{\theta_c}{5} = \frac{\theta_f - 32}{9}, sendo \theta_c e \theta_f 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 45. 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 con, e então, a quantidade de suco que Letícia vai poder tomar é N - con (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 A, B da entrada, e caso A = 0 (Que significa que o suco não é de abacaxi com hortelã) e B = 1 (Que significa que o suco contém pedaços), então adicionamos +1 em con.

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 u (ultima vez que um valor apareceu) como 0, e com o tamanho S + 1. Também vamos criar uma variável com o tamanho do intervalo terminando na posição i atual, chamaremos esse valor de d. Agora, para cada valor X_i rodamos:

  • Se u[X_i] estiver dentro do intervalo atual (\geq i - d), logo, adicionar ele de novo quebraria as regras:
    • d := d - (u[X_i] - (i - d) + 1), ou seja, tiramos do tamanho a parte que vai do começo até a última vez que X_i apareceu.
  • d := d + 1 (o tamanho aumenta em 1, pois adicionamos o X_i ao final do intervalo)
  • u[X_i] = i

Agora fica claro que a resposta vai ser o d máximo entre todas as posições i.

Clique aqui para ver o código