1267 - Biblioteca Pascal
Mais um dia, mais um problema Ad Hoc...
Descrição
Solução
Uma maneira fácil de resolver este problema envolve guardar a quantidade de jantares em que todos os alunos participaram e no final verificar se alguém tem o número de jantares igual ao número total. Tal solução é viável porque sabemos que o limite de jantares e alunos é pequeno.
Outra possível solução envolveria assumir que todos os alunos participaram de todos os jantares e ir alterando o julgamento caso se prove que um aluno não foi a um determinado jantar. O principal problema com essa abordagem para esse problema específico é que pode-se economizar tempo se conseguirmos provar que nenhum aluno foi em todos, terminando o programa sem ler todas as entradas. Infelizmente, isso traz riscos, já que em uma mesma execução temos diversos casos de teste.
Mitigar esse risco é possível, mas só traria mais dificuldade na implementação. Neste caso, ficamos com a primeira ideia mesmo.
#include <string.h>
#include <stdio.h>
int main(){
int jantares[101];
int N, D, x, resposta;
while(scanf("%d %d", &N, &D)){
if(!N && !D) break;
memset(jantares, 0, sizeof(jantares));
for(int i = 0; i < D; ++i){
for(int j = 0; j < N; ++j){
scanf("%d", &x);
jantares[j] += x;
}
}
resposta = 0;
for(int i = 0; i < N; ++i){
if(jantares[i] == D){
resposta = 1;
break;
}
}
printf("%s\n", resposta ? "yes" : "no");
}
return 0;
}
Last updated
Was this helpful?