Este documento fornece dicas para equipes que participarão de maratonas de programação. Resume as informações essenciais em 3 frases:
1) Maratonas de programação são competições onde equipes tentam resolver o maior número de problemas de programação em menor tempo para ganhar prêmios.
2) O documento fornece dicas sobre estratégias de equipe, algoritmos e estruturas de dados comuns, linguagens de programação, e como evitar erros comuns para ajudar as equipes a se prepararem para a competição.
3) Equipes
4. O que é?
Competição com diversas equipes de programadores tentando resolver o maior número de
problemas em menor tempo
Equipes de 3 programadores e 1 reserva
Toda equipe deve ter um coach (técnico)
O número de problemas depende da competição (6-15)
Pode ter problemas em inglês ou todos em inglês
Existem duas etapas nacionais e a etapa internacional da competição
Pode render uma viagem...
5. Dados
Brasil:
Começou em 1996;
2014
643 times de 199 escolas em 41 sedes
Vencedores: USP SP, UFCG e UFRJ
Mundo:
Começou em 1977 nos EUA
2015
38.160 participantes de 2.534 universidades de 101
países (seis continentes)
Os vencedores dos últimos anos são China e Rússia
7. Motivação
Você está estudando computação, você deveria gostar de programar
Se não gosta, pode estar no lugar errado…
Diversas empresas fazem testes similares aos das maratonas de programação para contratar
programadores
Alguns sites indicam vagas em empresas aos melhores programadores
É legal competir, né?
Ganhar melhor ainda!
A maioria dos eventos tem premiação
Você disse viagens?
Algumas até em dinheiro! Uhuu!
8. Benefícios
Mantém o raciocínio afiado
Melhora as habilidades de programação
Facilita o entendimentos dos conteúdos do curso
Parece que com o tempo tudo fica mais fácil perto de problemas difíceis da Maratona
Destaque nacional ou internacional: Os melhores vão para as finais e as grandes empresas sabem
disso!
Mas claro que tudo depende do treinamento...
9. Como Se Preparar
SPOJ (http://br.spoj.com)
URI Online (http://www.urionlinejudge.com.br)
CodeForces (http://codeforces.com)
POJ (http://poj.org)
UVa (http://uva.onlinejudge.org/)
TopCoder (http://community.topcoder.com)
CodinGame (http://www.codingame.com)
11. Funcionamento da Maratona
Warmup
Tem 1 hora de duração
Em geral, apresenta só um problema fácil para ambientação das equipes, mas pode ter mais de um
Prova
Geralmente tem 5 horas de duração
Podem levar códigos impressos
Durante a prova:
Pode sair pra beber água, ir no banheiro e comer
Não pode acessar outros web sites além do site do BOCA
Cada equipe que resolver um dos problemas, recebe um balão
Critério de classificação
Quantidade de problemas resolvidos
Quantidade de tempo que cada equipe necessitou para resolver os problemas, em minutos decorridos desde o início
da competição
12. BOCA
Problems
Visualizar as questões da prova
Runs
Submeter as suas soluções e receber as respostas dos juízes
Para submeter uma solução, o time deverá selecionar o problema para o qual a solução foi feita, a linguagem
utilizada e depois carregar o arquivo contendo a solução
Score
Mostra o placar atualizado da competição. Vale a pena lembrar que o placar será congelado antes do final da
competição (suspense mantido :-))
Clarifications
Essa opção permite que o time faça perguntas aos juízes a cerca de um problema específico ou de algum aspecto
geral da prova
Tasks
O time poderá enviar arquivos para impressão
13. BOCA - Tipos de Respostas
Resposta Descrição
YES Seu programa foi aceito, e você receberá um balão da cor correspondente ao problema.
NO: Incorrect Output
Também conhecido como Wrong Answer. Indica que seu programa respondeu incorretamente
algum(ns) dos testes dos juízes.
NO: Time-limit Exceeded
A execução do seu programa excedeu o tempo permitido pelos juízes. Esse limite de tempo
usualmente não é divulgado aos times e pode variar para cada problema.
NO: Runtime Error
Durante o teste ocorreu um erro de execução (causado pelo seu programa) na máquina dos juízes.
Acesso a posições irregulares de memória ou estouro dos limites da máquina são os erros mais
comuns.
NO: Compilation Error
Seu programa tem erros de sintaxe. Pode ser ainda que você errou o nome do problema ou
linguagem no momento da submissão.
NO: Output Format Error
Também conhecido como Presentation Error, indica que a saída do seu programa não segue a
especificação exigida na folha de questões, apesar do "resultado" estar correto. Corrija para se
adequar à especificação do problema.
NO: Contact Staff Você deve pedir a presença do pessoal de staff, pois algum erro incomum aconteceu.
14.
15. Como resolver os problemas?
Conhecer algoritmos e estruturas de dados
Conhecer bem a equipe e trabalhar em grupo
Conhecer bem a linguagem
Conhecer a IDE
16. Algoritmos e Estruturas de Dados
Grafos, pilhas, filas, listas, árvores, matrizes, vetores, …
Recursão, Ordenação, Programação Dinâmica, Algoritmos de Busca, …
Referências excelentes:
Algoritmos - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
Competitive Programming 3, Steven Halim and Felix Halim
17. Trabalho em Equipe
Definam uma estratégia
Depende da composição da equipe
Caso tenha um problema que envolva geometria, e tenha um membro da equipe que tenha mais
experiência no assunto, passe pra ele!
Exemplos:
Estratégia simples: Mais individualista possível
Terminal Man: Um fica sempre no computador e os outros vão avaliando os problemas individualmente
Think Tank: Um no computador e os dois outros focam no mesmo problema
Lembrando que as estratégias não precisam ser fixas durante a prova
18. Linguagens
Conheça os recursos disponíveis da linguagem e use-os ao máximo
Em particular, você nunca deve ter que implementar um algoritmo de ordenação à mão, por
exemplo
Saiba como debugar o código na linguagem
Criar breakpoints, watches, …
C e C++
int main deve retornar 0 no final do programa
Não usar conio.h
Java
Nomeie a sua classe com o nome do problema, em geral em minúsculas
Não se pode usar pacotes
19. Dicas Gerais
Comece a prova ordenando/definindo o nível de dificuldade de cada problema
Se estiver com dificuldade de ordenar, verifique o placar para ver quais problemas as outras equipes estão
resolvendo/tentando resolver
Não precisa deixar o código bonito, mas tem que estar compreensível
Use as letras indicadas na descrição do problema para nomear as variáveis
Occam’s Razor: A solução melhor é sempre a mais simples!
Muito cuidado com os limites das entradas
Implementar no papel em pseudo-código antes de passar para o computador
Cuidado com: Ponteiros, memória, tamanho e tipos das entradas
20. Dicas Gerais (2)
Entradas e Saídas dos Problemas
Termine sempre as suas respostas com uma quebra de linha
Leve impressos:
Tabela ASCII
Códigos mais complexos
Saiba:
Métodos de manipulação e formatação de Strings
Métodos de manipulação e impressão de matrizes
Melhor dica de todas: PRATICAR!
21. Submissões
TESTE BEM o algoritmo antes da submissão
Os casos de teste não são somente os descritos no problema. São compostos de diversos outros testes.
Pense nisso!
Submissões erradas somam penalidades no tempo, em geral 20 minutos
22. Erros Bobos/Comuns
Crie o seu arquivo-fonte contendo a solução de um problema com o nome indicado no enunciado;
Escolha a linguagem correta na submissão;
Lembre-se de que sua solução deve ler os dados da entrada padrão e escrever os resultados na
saída padrão. Nada deve ser escrito na saída padrão de erro;
Escrita das saídas com espaços adicionais;
23. Dicas TLE
Perto de 106 passos, o programa passa
107 passos tem de ser passos simples passar
108 normalmente não passa
Por exemplo,
se N vai até 100, o ideal é procurar uma solução O(N3) no máximo
se N vai até 1000, o ideal eh até O(N2)
...
24. Treinamento
Roteiro: http://wiki.maratona.dcc.ufmg.br/
Monitor: Lucas Tsutsui (lucastsui@hotmail.com)
Professores com diferentes temas
Podemos ter mudanças de horários pontuais para cada professor
Vamos ter a seleção das equipes
Inicialmente a ideia é ter 3 equipes
Equipes que resolveram a mesma quantidade de problemas são classificadas em ordem crescente de tempo: quem gastou menos tempo aparece antes de quem gastou mais tempo;