sexta-feira, 20 de maio de 2016

[OBI2012] Consecutivos

Certamente a questão Consecutivos foi a mais complicada da primeira fase da OBI 2012, apesar de também não exigir nenhum conteúdo mais avançado. Para resolvê-la basta saber trabalhar bem com as estruturas de repetição.

Na minha solução usei a variável $seqMaior$ para guardar a pontuação da maior sequência e $seqAtual$ para guardar a pontuação da sequência atual que inicia com o valor $1$, uma vez que não existe uma sequência de $0$ termos. A cada laço do for há uma verificação: se o número lido for igual ao lido anteriormente a pontuação da sequência é incrementada em 1, caso contrário a sequência que estava sendo contada acaba, mas antes de reinicializá-la com $1$ precisamos verificar se ela é a maior até agora para atualizar a variável $seqMaior$. Observe que esta verificação não é feita para o primeiro número lido($i = 0$).

Código em C++

quinta-feira, 19 de maio de 2016

[OBI2012] Corrida

Esta questão (leia aqui) é facilmente resolvida se pensarmos no problema como uma divisão, onde C é o dividendo, N é o divisor e o resultado pretendido é o resto.

Leonardo, ao percorrer $C$ metros, fará o circuito da pista completamente $X$ vezes, sendo que o ponto de parada da sua última volta será determinado pela distância que resta correr após as $X$ voltas, ou seja, $C - X \cdot N$, observe que isso é exatamente o resto da divisão de $C$ por $N$. Portanto, basta imprimir $C$ % $M$.

Código em C++

terça-feira, 17 de maio de 2016

[OBI2012] Vice Campeão

A questão, que pode ser lida aqui, é uma questão simples da primeira fase da OBI 2012 que pede, em outras palavras, o segundo maior valor entre três números.

A solução que pensei foi ordenar os três inteiros em ordem crescente e imprimir o número do meio(ou o segundo maior).

Código em C++

Vale lembrar que existem várias outras abordagens possíveis para resolver esse problema.