Dicas para maratonas de programação

25
Dicas para Maratonas de Programação Prof. Dr. Anderson Viçoso de Araújo facom.ufms.br/~andvicoso 2016

description

Dicas para maratonas de programação

Transcript of Dicas para maratonas de programação

Page 1: Dicas para maratonas de programação

Dicas para Maratonas de Programação

Prof. Dr. Anderson Viçoso de Araújo

facom.ufms.br/~andvicoso2016

Page 2: Dicas para maratonas de programação

Roteiro

Introdução

O que é?

Motivação

Preparação

Prova

BOCA

Dicas

Estruturas de dados

Equipe

Erros comuns

Page 3: Dicas para maratonas de programação

Introdução

Alongando os dedos...

Page 4: Dicas para maratonas de programação

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...

Page 5: Dicas para maratonas de programação

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

Page 6: Dicas para maratonas de programação

Dados (2)

Page 7: Dicas para maratonas de programação

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!

Page 8: Dicas para maratonas de programação

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...

Page 9: Dicas para maratonas de programação

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)

Page 10: Dicas para maratonas de programação

Prova

Mandando bala!

Page 11: Dicas para maratonas de programação

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

Page 12: Dicas para maratonas de programaçã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

Page 13: Dicas para maratonas de programaçã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.

Page 14: Dicas para maratonas de programação
Page 15: Dicas para maratonas de programação

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

Page 16: Dicas para maratonas de programação

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

Page 17: Dicas para maratonas de programação

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

Page 18: Dicas para maratonas de programação

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

Page 19: Dicas para maratonas de programação

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

Page 20: Dicas para maratonas de programação

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!

Page 21: Dicas para maratonas de programação

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

Page 22: Dicas para maratonas de programação

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;

Page 23: Dicas para maratonas de programação

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)

...

Page 24: Dicas para maratonas de programação

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

Page 25: Dicas para maratonas de programação

Dúvidas?Boa Sorte!

Let the carnage begin! (Rock 'N Roll Racing, 1993)