Dicas para maratonas de programação
-
Upload
anderson-araujo -
Category
Software
-
view
576 -
download
4
description
Transcript of Dicas para maratonas de programação
Dicas para Maratonas de Programação
Prof. Dr. Anderson Viçoso de Araújo
facom.ufms.br/~andvicoso2016
Roteiro
Introdução
O que é?
Motivação
Preparação
Prova
BOCA
Dicas
Estruturas de dados
Equipe
Erros comuns
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
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...
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 101países (seis continentes)
Os vencedores dos últimos anos são China e Rússia
Dados (2)
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!
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...
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)
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 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
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
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 OutputTambém conhecido como Wrong Answer. Indica que seu programa respondeu incorretamentealgum(ns) dos testes dos juízes.
NO: Time-limit ExceededA execução do seu programa excedeu o tempo permitido pelos juízes. Esse limite de tempousualmente não é divulgado aos times e pode variar para cada problema.
NO: Runtime ErrorDurante 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 maiscomuns.
NO: Compilation ErrorSeu programa tem erros de sintaxe. Pode ser ainda que você errou o nome do problema oulinguagem no momento da submissão.
NO: Output Format ErrorTambém conhecido como Presentation Error, indica que a saída do seu programa não segue aespecificação exigida na folha de questões, apesar do "resultado" estar correto. Corrija para seadequar à especificação do problema.
NO: Contact Staff Você deve pedir a presença do pessoal de staff, pois algum erro incomum aconteceu.
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
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
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
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
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
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!
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
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;
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)
...
Treinamento
Roteiro: http://wiki.maratona.dcc.ufmg.br/
Monitor: Lucas Tsutsui ([email protected])
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
Dúvidas?Boa Sorte!
Let the carnage begin! (Rock 'N Roll Racing, 1993)