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++
//CONSECUTIVOS: OBI 2012 F1N1 | |
#include <cstdio> | |
int main(){ | |
int N,seqAtual=1,seqMaior=1,num,anterior; | |
scanf("%d",&N); | |
for(int i=0;i<N;i++){ | |
scanf("%d",&num); | |
if(i>0){//não verifica para i=0, já que não há um anterior nesse caso | |
if(anterior == num) seqAtual++; | |
if(anterior != num || i == N-1){ //verifica se a sequencia acabou ou se é o ultimo numero lido | |
if(seqAtual > seqMaior) seqMaior = seqAtual; | |
seqAtual = 1; | |
} | |
} | |
anterior = num; | |
} | |
printf("%d\n",seqMaior); | |
return 0; | |
} |