OBI 2026 – Fase 2 Nível Mirim

Festa de Aniversário

Solução escrita por Malu Azevedo

Conhecimentos necessários:

O problema nos pede para determinar quem comemora aniversário primeiro no ano, dadas as datas de aniversário de Alice ($$DA, MA$$) e de Bruno ($$DB, MB$$), imprimindo “$$A$$” se Alice festejar primeiro ou “$$B$$” se Bruno festejar primeiro.

Ideia Central

Para descobrir quem faz aniversário primeiro ao longo do ano, precisamos comparar as duas datas observando a hierarquia do calendário, em que o mês possui prioridade sobre o dia. Se o mês do aniversário de Alice (MAMA) for diferente do mês de Bruno ($$MB$$), a pessoa com o menor mês comemora primeiro, pois um mês menor vem antes no ano. Caso os dois façam aniversário no mesmo mês ($$MA = MB$$), o desempate é feito pelo dia, significando que a pessoa com o menor dia ($$DA$$ ou $$DB$$) comemora primeiro.

Abordagem Completa

Lemos os quatro inteiros de entrada e aplicamos a lógica condicional direta: se $$MA \lt MB$$, Alice faz aniversário antes. Se $$MB \lt MA$$, Bruno faz aniversário antes. Caso os meses sejam iguais, comparamos os dias: se $$DA \lt DB$$, Alice vem primeiro. Caso contrário, Bruno vem primeiro. A complexidade é $$O(1)$$ por conta que são realizadas apenas comparações diretas entre valores numéricos.

Clique aqui para ver o código completo

Adivinha o Número

Solução Escrita por Márcio Vitor

Conhecimentos necessários:

Para resolver esse problema podemos calcular as variáveis $$distA, distB$$ distância de P à A e B respectivamente, depois verifique se $$distA \lt distB$$ então imprima $$A$$, se $$distA \gt distB$$ imprima $$B$$, caso haja empate imprima $$E$$.

Para calcular a distância de dois números $$X, Y$$, você pode usar a função $$abs$$ da biblioteca $$<cmath>$$, ou usar um if para verificar qual o maior e subtrair com o valor do menor.

As subtarefas tem outras formas de calcular $$distA$$, $$distB$$.

Subtarefa 2 ($$A \leq P \leq B$$) (20 pontos):

$$distA = P – A$$
$$distB = B – P$$

Subtarefa 3 ($$A \leq B$$) (20 pontos):

perceba que se $$P \lt A$$ então $$A$$ com certeza está mais perto, e analogamente para o caso $$P \gt B$$ que $$B$$ ganha, então resta o caso $$A \leq P \leq B$$ resolvido na subtarefa 2.

Clique aqui para ver o código completo.

Passes

Solução Escrita por Márcio Vitor

Conhecimentos necessários:

Subtarefa 2 ($$N = 3$$) (20 pontos):

Nessa subtarefa basta verificar se ocorreram passes entre o jogador $$1 e 2$$ e entre os jogadores $$2 e 3$$, mantendo também duas variáveis $$time1, time2$$ que guardam as quantidades de passes para cada time.

Como $$N$$ é bem pequeno é possível resolver usando várias condicionais, caso o aluno não saiba usar loops

Subtarefa 3 (todos os valores de $$J_i$$ são positivos) (20 pontos):

como a todo momento o time $$1$$ é necessário verificar apenas se há uma mudança de jogador entre dois tempos consecutivos. Para isso itere $$i$$ indo de $$2$$ a $$N$$ e verifique se $$J_i \neq J_{i-1}$$ então incremente a variável $$time1$$.

Sem restrições adicionais (100 pontos):

Vamos iterar da mesma forma que a subtarefa $$3$$ porém para para verificar se um passe ocorreu além da mudança de jogadores entre $$i$$ e $$i-1$$ é também necessário verificar se ambos são do mesmo time ou seja se $$J_i$$ e $$J_{i-1}$$ tem mesmo sinal.

nota: uma forma fácil de verificar se dois números $$X,Y$$ têm mesmo sinal é se $$X \cdot Y > 0$$(pelas regras de sinal da multiplicação), para mais detalhes consulte o código abaixo.

Clique aqui para ver o código completo.