Iniciando no URI e no UVA
No UVa:
-
- Crie um conta em http://uva.onlinejudge.org/
- Em Browse Problem você terá acesso a todos os problemas do site. Utilizarei o problema 100 – The 3n + 1 problem como exemplo.
- O UVa utiliza entrada e saída padrão. Devemos utililizar scanf/cin para leitura e printf/cout para imprimir a saída.
- 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.
- É 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.
- 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.
- 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.
- 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.
- 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.