SlideShare uma empresa Scribd logo
1 de 25
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 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 101
paí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 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.
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 (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
Dúvidas?
Boa Sorte!
Let the carnage begin! (Rock 'N Roll Racing, 1993)

Mais conteúdo relacionado

Mais procurados

Lógica de Programação - Unimep/Pronatec - Aula01
Lógica de Programação - Unimep/Pronatec - Aula01Lógica de Programação - Unimep/Pronatec - Aula01
Lógica de Programação - Unimep/Pronatec - Aula01André Phillip Bertoletti
 
Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04thomasdacosta
 
Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02André Phillip Bertoletti
 
Lógica de Programação - Unimep/Pronatec - Aula04
Lógica de Programação - Unimep/Pronatec - Aula04Lógica de Programação - Unimep/Pronatec - Aula04
Lógica de Programação - Unimep/Pronatec - Aula04André Phillip Bertoletti
 
Oficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvROficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvRCiro Matheus
 
Lógica de Programação - Unimep/Pronatec - Aula03
Lógica de Programação - Unimep/Pronatec - Aula03Lógica de Programação - Unimep/Pronatec - Aula03
Lógica de Programação - Unimep/Pronatec - Aula03André Phillip Bertoletti
 
Lógica de Programação - Unimep/Pronatec - Aula10
Lógica de Programação - Unimep/Pronatec - Aula10Lógica de Programação - Unimep/Pronatec - Aula10
Lógica de Programação - Unimep/Pronatec - Aula10André Phillip Bertoletti
 
Aula 2 - Lógica de Programação
Aula 2 - Lógica de ProgramaçãoAula 2 - Lógica de Programação
Aula 2 - Lógica de ProgramaçãoInstituto CENTEC
 
Conceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoConceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoRobson Ferreira
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação12anogolega
 
Conceitos e técnicas de programação apresentação
Conceitos e técnicas de programação apresentaçãoConceitos e técnicas de programação apresentação
Conceitos e técnicas de programação apresentaçãoRobson Ferreira
 
Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02thomasdacosta
 
Algoritmos - Aula 10 A - Traducao Do Port Est Para Ling C
Algoritmos - Aula 10 A - Traducao Do Port Est Para Ling CAlgoritmos - Aula 10 A - Traducao Do Port Est Para Ling C
Algoritmos - Aula 10 A - Traducao Do Port Est Para Ling CRodrigo Kiyoshi Saito
 
Lógica de Programação - Unimep/Pronatec - Aula06
Lógica de Programação - Unimep/Pronatec - Aula06Lógica de Programação - Unimep/Pronatec - Aula06
Lógica de Programação - Unimep/Pronatec - Aula06André Phillip Bertoletti
 
Conceitos e técnicas de programação aula 1
Conceitos e técnicas de programação aula 1Conceitos e técnicas de programação aula 1
Conceitos e técnicas de programação aula 1Robson Ferreira
 
mod1-algoritmia
mod1-algoritmiamod1-algoritmia
mod1-algoritmiadiogoa21
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonRicardo Zalla
 

Mais procurados (20)

Lógica de Programação - Unimep/Pronatec - Aula01
Lógica de Programação - Unimep/Pronatec - Aula01Lógica de Programação - Unimep/Pronatec - Aula01
Lógica de Programação - Unimep/Pronatec - Aula01
 
Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04
 
Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02Lógica de Programação - Unimep/Pronatec - Aula02
Lógica de Programação - Unimep/Pronatec - Aula02
 
Lógica de Programação - Unimep/Pronatec - Aula04
Lógica de Programação - Unimep/Pronatec - Aula04Lógica de Programação - Unimep/Pronatec - Aula04
Lógica de Programação - Unimep/Pronatec - Aula04
 
Oficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvROficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvR
 
Etapas da programação
Etapas da programaçãoEtapas da programação
Etapas da programação
 
02 while
02 while02 while
02 while
 
Lógica de Programação - Unimep/Pronatec - Aula03
Lógica de Programação - Unimep/Pronatec - Aula03Lógica de Programação - Unimep/Pronatec - Aula03
Lógica de Programação - Unimep/Pronatec - Aula03
 
Lógica de Programação - Unimep/Pronatec - Aula10
Lógica de Programação - Unimep/Pronatec - Aula10Lógica de Programação - Unimep/Pronatec - Aula10
Lógica de Programação - Unimep/Pronatec - Aula10
 
Aula 2 - Lógica de Programação
Aula 2 - Lógica de ProgramaçãoAula 2 - Lógica de Programação
Aula 2 - Lógica de Programação
 
Conceitos e técnicas de programação introdução
Conceitos e técnicas de programação introduçãoConceitos e técnicas de programação introdução
Conceitos e técnicas de programação introdução
 
Introdução à programação
Introdução à programaçãoIntrodução à programação
Introdução à programação
 
Conceitos e técnicas de programação apresentação
Conceitos e técnicas de programação apresentaçãoConceitos e técnicas de programação apresentação
Conceitos e técnicas de programação apresentação
 
Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02
 
Algoritmos - Aula 10 A - Traducao Do Port Est Para Ling C
Algoritmos - Aula 10 A - Traducao Do Port Est Para Ling CAlgoritmos - Aula 10 A - Traducao Do Port Est Para Ling C
Algoritmos - Aula 10 A - Traducao Do Port Est Para Ling C
 
Lógica de Programação - Unimep/Pronatec - Aula06
Lógica de Programação - Unimep/Pronatec - Aula06Lógica de Programação - Unimep/Pronatec - Aula06
Lógica de Programação - Unimep/Pronatec - Aula06
 
Conceitos e técnicas de programação aula 1
Conceitos e técnicas de programação aula 1Conceitos e técnicas de programação aula 1
Conceitos e técnicas de programação aula 1
 
mod1-algoritmia
mod1-algoritmiamod1-algoritmia
mod1-algoritmia
 
Trabalho sobre a linguagem Python
Trabalho sobre a linguagem PythonTrabalho sobre a linguagem Python
Trabalho sobre a linguagem Python
 
python.comandos
python.comandospython.comandos
python.comandos
 

Semelhante a Dicas Maratonas Programação

Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Walmyr Lima e Silva Filho
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Gabriel Rubens
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Gabriel Rubens
 
Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste - Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste - Leonardo Galani
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSprofjotamarcosduarte
 
Refatoração 1/3 webinar
Refatoração 1/3   webinarRefatoração 1/3   webinar
Refatoração 1/3 webinarZG Soluções
 
(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programaçãoCarlos Santos
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoRenan Carvalho
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 

Semelhante a Dicas Maratonas Programação (20)

Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
Testando na Gringa - Se preparando para uma entrevista técnica para uma vaga ...
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Dba Testes Gerentes B2
Dba Testes Gerentes B2Dba Testes Gerentes B2
Dba Testes Gerentes B2
 
Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste - Tdc2013 - Trilha de Teste -
Tdc2013 - Trilha de Teste -
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Refatoração 1/3 webinar
Refatoração 1/3   webinarRefatoração 1/3   webinar
Refatoração 1/3 webinar
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu código
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Ap algoritmosglauco
Ap algoritmosglaucoAp algoritmosglauco
Ap algoritmosglauco
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
EaD sem Dor
EaD sem DorEaD sem Dor
EaD sem Dor
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 

Dicas Maratonas Programação

  • 1. Dicas para Maratonas de Programação Prof. Dr. Anderson Viçoso de Araújo facom.ufms.br/~andvicoso 2016
  • 2. Roteiro  Introdução  O que é?  Motivação  Preparação  Prova  BOCA  Dicas  Estruturas de dados  Equipe  Erros comuns
  • 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
  • 25. Dúvidas? Boa Sorte! Let the carnage begin! (Rock 'N Roll Racing, 1993)

Notas do Editor

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