Entendendo a entrada e saída dos problemas de online judges

Publicado por Delacyr Categoria: Geral|SPOJ

29 Mar 2010

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 N que indica o número de participantes da festa. A linha seguinte contém a sequência, em ordem de entrada, dos N ingressos das pessoas que participaram da festa. O final da entrada é indicado quando N = 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", onde n é 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
0

Exemplo de saída

Teste 1
3

Teste 2
10

Restriçõ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:


Deixe seu comentário

Sobre este blog

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.

  • Débora: ALGUÉM PODE ME AJUDAR A RESOLER ESSE ALGORITMO. Escreva um programa que leia 5 notas entre 0 e 1 [...]
  • MARCOS: ALGUEM PODE ME AJUDAR FAZENDO FAVOR? faça um algoritmo que leia 200 idades, entre 1 e 15 anos (val [...]
  • graziella: ola gostaria que alguem manda-se pra mim um pseudo codigo de um conversor moedas,que converta reais [...]
  • DANIEL SALVIATO: Bom dia eu tambem tenho a mesma duvida dos colegas acima , alguem teria essa informacao? Obrigado e [...]
  • Gabriel: olá pessoal estou com o mesmo problema do colega ai, por favor me ajudem Uma agência de viagens s [...]