Notei que algumas pessoas enfrentam problemas ao entender a forma de como será dada a entrada/saída dos problemas. Aqui vai um exemplo de como se deve interpretar a entrada e saída de um problema do Spoj:
Problema: 811. Quermesse
Entrada
A entrada é composta de vários conjuntos de teste. A primeira linha de um conjunto de teste contém um número inteiro positivo
Nque indica o número de participantes da festa. A linha seguinte contém a sequência, em ordem de entrada, dosNingressos das pessoas que participaram da festa. O final da entrada é indicado quandoN = 0. Para cada conjunto de teste da entrada haverá um único ganhador.Saída
Para cada conjunto de teste da entrada seu programa deve produzir três linhas. A primeira linha identifica o conjunto de teste, no formato
"Teste n", ondené numerado a partir de 1. A segunda linha deve conter o número do ingresso do ganhador, conforme determinado pelo seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente.Exemplo de entrada
4 4 5 3 1 10 9 8 7 6 1 4 3 2 12 10 0Exemplo de saída
Teste 1 3 Teste 2 10Restrições
0 <= N <= 10000(N = 0 apenas para indicar o fim da entrada)
Quando um problema diz que a entrada é composta de vários conjuntos de teste, então quer dizer que haverá um novo caso de teste enquanto a condição de parada seja satisfeita. No problema acima, cada caso de teste é composto por um inteiro N e em seguida por N inteiros. Nota-se que nos problemas de online judges nunca será necessário alocação dinâmica, percebemos nesse caso que haverá um vetor de inteiros onde o seu tamanho máximo será definido pela variável N. Observando as restrições impostas pelo problema acima, basta declarar um vetor com 10001 posições (a posição 0 conta).
int i,n,teste,ganhador,v[10001];
teste=1;
while (scanf("%d",&n) && n){ //Enquanto eu ler a variável N e essa variável for diferente de 0
for (i=0;i<n;++i) //Armazena os N inteiros em um vetor
scanf("%d",&v[i]);
//Aqui vai o processamento desse vetor
printf("Teste %d\n",teste++); //Primeira linha Teste x
printf("%d\n\n",ganhador); //Segunda linha o ganhador seguido por duas quebras de linhas, pois no enunciado, está claro que a terceira linha da saída deve ser em branco.
}
Espero que tenha esclarecido um pouco a forma como se deve ler e imprimir em um problema de online judge. Aconselho a dar uma lida no site criado pelo Vinicius Fortuna com intuito de auxiliar os iniciantes em maratonas e afins.
Ainda tem dúvidas? Entre em contato ou deixe um comentário.
Veja também:
Criado com objetivo de compartilhar informações sobre tudo que diz respeito a algoritmos, estruturas de dados e problemas de online judges.
Dúvidas ou sugestões? Entre em contato.