Professor Danilo Artigas

Danilo Artigas

Pesquisa

Iniciando no URI e no UVA

No UVa:

    1. Crie um conta em http://uva.onlinejudge.org/

 

  1. Em Browse Problem você terá acesso a todos os problemas do site. Utilizarei o problema 100 – The 3n + 1 problem como exemplo.
  2. O UVa utiliza entrada e saída padrão. Devemos utililizar scanf/cin para leitura e printf/cout para imprimir a saída.
  3. Observe que a entrada consiste em um conjunto de casos de testes, portanto é necessário utilizar uma estrutura de repetição para considerar os diversos casos de teste. No código para o problema 3n + 1 essa estrutura está na linha 21,  while(scanf(“%ld %ld”, &i, &j)==2). A função scanf retorna o número de argumentos lidos com sucesso, no exemplo em questão, os casos de teste são constituídos de 2 inteiros que são lidos por scanf, quando alcançarmos o final do arquivo, representado por EOF, scanf não mais retornará 2 o que encerrará o loop.
  4. É fundamental que a resposta esteja EXATAMENTE no formato indicado pelo problema. O UVa verifica se uma resposta está correta comparando o arquivo de resposta que ele possui com o que foi gerado pelo programa enviado. Portanto, pular linhas a mais ou não pular, bem como errar o número de espaços em branco ou utilizar letras minúsculas ao invés de maiúsculas recebem wrong answer ou presentation error como resposta.
  5. Uma vez finalizado o código é importante testá-lo! Para isso é preciso verificar alguns casos de teste. Existem duas formas principais de inserir os casos de teste, uma é digitando e a outra é passando o arquivo de entrada, para isso copie e cole os casos de teste do problema em um editor de texto e salve o arquivo. Para o 3n + 1 salvarei os casos de teste num arquivo denominado 3n1.in. Seja 3n1 o nome do programa que foi criado. Para passar o arquivo de teste utilize o seguinte comando no terminal #./3n1 < 3n1.in.
  6. Pronto! Se até agora tudo saiu bem, você possuí um código e este está funcionando para os casos de teste apresentados, Chegou a hora de submeter a solução ao UVa. Existem diversas formas de fazer essa submissão, as duas principais são: na página de descrição do problema clique em Submit, então escolha a linguagem e faça download do arquivo ou copie e cole o código para a página de submissão, agora é só enviar; a outra forma é clicar em Quick Submit, digitar o número do problema e prosseguir com a submissão como no caso anterior. Para acompanhar suas submissões vá em My Submissions.
  7. Uma boa dica é acessar a página http://uhunt.felix-halim.net/ lá você poderá acompanhar sua evolução no UVa, encontrar sugestões de exercícios e muito mais.
  8. Abaixo está o código em C para resolver o problema 3n + 1.

Código em C para problema 100:

  1 #include<stdio.h> 
  2 #include<stdlib.h> 
  3  
  4 long int cycle(long int x){ 
  5     long int cont;
  6      
  7     cont=1; 
  8     while(x!=1){ 
  9         cont++; 
 10         if(x % 2 ==1) 
 11             x=3*x+1; 
 12         else 
 13             x=x/2;     
 14     } 
 15 return cont; 
 16 } 
 17  
 18 int main(void){ 
 19     long int i,j,k,tam, ini, fim;
 20  
 21     while(scanf("%ld %ld", &i, &j)==2){ 
 22         if(i<=j){ 
 23             ini=i; 
 24             fim=j; 
 25         } 
 26         else{ 
 27             ini=j; 
 28             fim=i; 
 29         } 
 30         tam=0; 
 31         for(k=ini; k<=fim; k++){ 
 32             if(cycle(k)>tam) 
 33                 tam=cycle(k); 
 34         }         
 35         printf("%ld %ld %ld\n", i, j, tam); 
 36     } 
 37 return 0;
 38 }

No URI:

Para os problemas no site URI o procedimento de elaboração  do código, teste e submissão dos mesmos é idêntico ao do UVa. A diferença fundamental entre eles é que o URI só aceita submissões em C++ ou java. Para àqueles que preferem utilizar C, basta submeter como C++ e, caso envie o arquivo, ao invés de .c salve como .cpp. também é importante lembrar que o compilador padrão (no linux) para C++ é o g++ e não o gcc. Além disso, toda resposta do URI deve terminar com /n ou endl.

Para maiores detalhes sobre submissão no URI, consulte http://www.urionlinejudge.com.br/judge/pt/help

O site do UVa possui uma maior base de dados de problemas e, integrado com o uhunt e com o Comepetitive Programming, é uma grande ferramenta de estudo e a principal forma de preparação para a Maratona de Programação.

O URI possui um número reduzido de problemas, mas além de estar em português, ele possui ótimas ferramentas de ensino e uma boa classificação de problemas quanto aos tópicos e níveis de dificuldade e interface mais amigável. Logo é excelente para iniciantes e será o site utilizado em nossos cursos introdutórios.

Skip to content