Dicas para Maratonas de
Programação
Prof. Dr. Anderson Viçoso de Araújo
facom.ufms.br/~andvicoso
2016
Roteiro
 Introdução
 O que é?
 Motivação
 Preparação
 Prova
 BOCA
 Dicas
 Estruturas de dados
 Equipe
 Erros com...
Introdução
Alongando os dedos...
O que é?
 Competição com diversas equipes de programadores tentando resolver o maior número de
problemas em menor tempo
...
Dados
 Brasil:
 Começou em 1996;
 2014
 643 times de 199 escolas em 41 sedes
 Vencedores: USP SP, UFCG e UFRJ
 Mundo...
Dados (2)
Motivação
 Você está estudando computação, você deveria gostar de programar
 Se não gosta, pode estar no lugar errado…
...
Benefícios
 Mantém o raciocínio afiado
 Melhora as habilidades de programação
 Facilita o entendimentos dos conteúdos d...
Como Se Preparar
 SPOJ (http://br.spoj.com)
 URI Online (http://www.urionlinejudge.com.br)
 CodeForces (http://codeforc...
Prova
Mandando bala!
Funcionamento da Maratona
 Warmup
 Tem 1 hora de duração
 Em geral, apresenta só um problema fácil para ambientação das...
BOCA
 Problems
 Visualizar as questões da prova
 Runs
 Submeter as suas soluções e receber as respostas dos juízes
 P...
BOCA - Tipos de Respostas
Resposta Descrição
YES Seu programa foi aceito, e você receberá um balão da cor correspondente a...
Como resolver os problemas?
 Conhecer algoritmos e estruturas de dados
 Conhecer bem a equipe e trabalhar em grupo
 Con...
Algoritmos e Estruturas de Dados
 Grafos, pilhas, filas, listas, árvores, matrizes, vetores, …
 Recursão, Ordenação, Pro...
Trabalho em Equipe
 Definam uma estratégia
 Depende da composição da equipe
 Caso tenha um problema que envolva geometr...
Linguagens
 Conheça os recursos disponíveis da linguagem e use-os ao máximo
 Em particular, você nunca deve ter que impl...
Dicas Gerais
 Comece a prova ordenando/definindo o nível de dificuldade de cada problema
 Se estiver com dificuldade de ...
Dicas Gerais (2)
 Entradas e Saídas dos Problemas
 Termine sempre as suas respostas com uma quebra de linha
 Leve impre...
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 co...
Erros Bobos/Comuns
 Crie o seu arquivo-fonte contendo a solução de um problema com o nome indicado no enunciado;
 Escolh...
Dicas TLE
 Perto de 106 passos, o programa passa
 107 passos tem de ser passos simples passar
 108 normalmente não pass...
Treinamento
 Roteiro: http://wiki.maratona.dcc.ufmg.br/
 Monitor: Lucas Tsutsui (lucastsui@hotmail.com)
 Professores co...
Dúvidas?
Boa Sorte!
Let the carnage begin! (Rock 'N Roll Racing, 1993)
Dicas para maratonas de programação
Próximos SlideShares
Carregando em…5
×

Dicas para maratonas de programação

2.192 visualizações

Publicada em

Dicas para maratonas de programação

Publicada em: Software
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.192
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
50
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • 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;
  • Dicas para maratonas de programação

    1. 1. Dicas para Maratonas de Programação Prof. Dr. Anderson Viçoso de Araújo facom.ufms.br/~andvicoso 2016
    2. 2. Roteiro  Introdução  O que é?  Motivação  Preparação  Prova  BOCA  Dicas  Estruturas de dados  Equipe  Erros comuns
    3. 3. Introdução Alongando os dedos...
    4. 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. 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
    6. 6. Dados (2)
    7. 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. 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. 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)
    10. 10. Prova Mandando bala!
    11. 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. 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. 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. 14. 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
    15. 15. 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
    16. 16. 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
    17. 17. 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
    18. 18. 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
    19. 19. 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!
    20. 20. 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
    21. 21. 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;
    22. 22. 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)  ...
    23. 23. 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
    24. 24. Dúvidas? Boa Sorte! Let the carnage begin! (Rock 'N Roll Racing, 1993)

    ×