SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
Olimpíadas	
  de	
  Programação:	
  
  O	
  que,	
  Por	
  que	
  e	
  Como?
          Alexandre	
  Duarte	
  
      aalexandrend@gmail.com
Agenda
• O	
  que	
  é	
  uma	
  Olimpíada	
  de	
  Programação?
• Por	
  que	
  parAcipar	
  ?
• Como	
  parAcipar	
  ?
   – Regras
   – Preparação
   – Tipos	
  de	
  Problemas
   – Resolvendo	
  um	
  Problema
O	
  que	
  é	
  uma	
  Olimpíada	
  de	
  
         Programação?




                                              3
O	
  que	
  é	
  uma	
  Olimpíada	
  de	
  
               Programação?
• CompeAção	
  individual	
  ou	
  por	
  equipes
    – Um	
  único	
  computador	
  em	
  ambos	
  os	
  casos

• ParAcipantes	
  recebem	
  um	
  conjunto	
  de	
  problemas	
  
  para	
  resolver	
  em	
  um	
  tempo	
  limitado

• Vence	
  quem	
  resolve	
  o	
  maior	
  número	
  de	
  problemas	
  
  no	
  menor	
  tempo
    – Resolver	
  significa	
  apenas	
  produzir	
  a	
  saída	
  correta	
  para	
  
      um	
  determinado	
  conjunto	
  de	
  entradas!
O	
  que	
  é	
  uma	
  Olimpíada	
  de	
  
               Programação?

• É	
  um	
  exercício	
  de	
  criaAvidade	
  e	
  habilidade	
  para	
  
  trabalhar	
  sob	
  pressão

• É	
  uma	
  compeAção!

• É	
  uma	
  brincadeira!

• É	
  uma	
  vitrine	
  para	
  você!
Exemplo	
  de	
  Problema:	
  
           Alarme	
  de	
  Maria
• Dados	
  a	
  hora	
  e	
  minuto	
  em	
  que	
  Maria	
  dormiu	
  e	
  
  a	
  hora	
  e	
  minuto	
  em	
  que	
  o	
  despertador	
  dela	
  vai	
  
  tocar,	
  calcule	
  a	
  quanAdade	
  de	
  minutos	
  de	
  sono	
  
  que	
  Maria	
  terá.
                   Entrada                      Saída
                    1	
  5	
  3	
  5             120
                 23	
  59	
  0	
  34             35
                21	
  33	
  21	
  10            1417
“Circuito	
  Mundial”	
  de	
  
 Olimpíadas	
  de	
  Programação
• Olimpíadas	
  locais	
  para	
  escolher	
  equipes	
  para	
  
  as	
  regionais
• Olimpíadas	
  regionais	
  para	
  escolher	
  equipes	
  
  para	
  as	
  nacionais
• Olimpíadas	
  nacionais	
  para	
  escolher	
  equipes	
  
  para	
  a	
  final	
  mundial
• Final	
  mundial...
• Google,	
  Microso=,	
  Yahoo,	
  IBM,	
  Oracle,	
  etc.
Situação	
  no	
  Brasil	
  em	
  2009

• 46	
  sedes	
  regionais
• 411	
  equipes	
  inscritas
• 52	
  equipes	
  classificadas	
  para	
  a	
  Nacional
   – Incluindo	
  uma	
  equipe	
  da	
  UFCG
• 5	
  equipes	
  se	
  classificarão	
  depois	
  de	
  amanhã	
  
  para	
  a	
  final	
  Mundial	
  na	
  China	
  
   – hbp://maratona.ime.usp.br/final09.html
Regional	
  de	
  2009	
  (sede	
  UFCG)
Regional	
  de	
  2009	
  (sede	
  UFCG)
Regional	
  de	
  2009	
  (sede	
  UFCG)
Regional	
  de	
  2009	
  (sede	
  UFCG)
Situação	
  no	
  Mundo	
  em	
  2008

•    88	
  países	
  
•    1838	
  insAtuições
•    cerca	
  de	
  7100	
  equipes
•    100	
  equipes	
  classificadas	
  para	
  a	
  final	
  Mundial	
  
Final	
  Mundial	
  de	
  2008	
  em	
  
    Estocolmo	
  -­‐	
  Suécia
Final	
  Mundial	
  de	
  2008	
  em	
  
    Estocolmo	
  -­‐	
  Suécia
Final	
  Mundial	
  de	
  2008	
  em	
  
    Estocolmo	
  -­‐	
  Suécia
Final	
  Mundial	
  de	
  2008	
  em	
  
    Estocolmo	
  -­‐	
  Suécia
I	
  Olimpíada	
  de	
  Programação	
  do	
  
             Litoral	
  Norte
• CompeAção	
  individual	
  para	
  moAvar	
  os	
  alunos	
  
  a	
  formarem	
  Ames	
  para	
  treinar	
  e	
  representar	
  o	
  
  CCAE/UFPB	
  nas	
  regionais	
  de	
  2010
• 4	
  horas	
  de	
  duração
• Prova	
  com	
  vários	
  (8	
  ou	
  mais)	
  problemas	
  de	
  
  diferentes	
  níveis	
  de	
  dificuldade
• Pode-­‐se	
  uAlizar	
  qualquer	
  material	
  impresso
    – Livros,	
  algoritmos,	
  anotações,	
  etc...
I	
  Olimpíada	
  de	
  Programação	
  do	
  
             Litoral	
  Norte
• Duas	
  categorias
   – Iniciante	
  (apenas	
  para	
  alunos	
  matriculados	
  em	
  sua	
  
     primeira	
  disciplina	
  de	
  programação)
   – Avançado	
  (demais	
  alunos)
• Premiação	
  para	
  os	
  três	
  primeiros	
  colocados	
  de	
  
  cada	
  categoria
• Todos	
  os	
  parAcipantes	
  serão	
  convidados	
  a	
  
  parAcipar	
  de	
  um	
  treinamento	
  para	
  parAcipar	
  de	
  
  outras	
  olimpíadas	
  de	
  programação
Por	
  que	
  devo	
  parAcipar	
  de	
  uma	
  
 Olimpíada	
  de	
  Programação?
Por	
  que	
  devo	
  parAcipar	
  de	
  
 Olimpíadas	
  de	
  Programação?
• É	
  diverAdo!
• É	
  desafiador!
• Empresas	
  (e	
  os	
  professores)	
  estão	
  sempre	
  de	
  
  olho	
  nos	
  alunos	
  que	
  parJcipam	
  deste	
  Jpo	
  de	
  
  compeJção!

• Cuidado:	
  Pode	
  causar	
  dependência!
ParAcipando	
  de	
  Olimpíadas	
  
   de	
  Programação	
  você	
  vai...
• Viajar
    – conhecer	
  lugares	
  novos
    – conhecer	
  gente	
  nova
• Se	
  relacionar	
  com	
  alunos	
  e	
  professores	
  de	
  
  outras	
  universidades
    – Networking
• Aprender	
  algoritmos	
  e	
  técnicas	
  de	
  programação	
  
  que	
  provavelmente	
  não	
  veria	
  na	
  sala	
  de	
  aula
Exemplo:	
  ACM	
  Interna+onal	
  
Collegiate	
  Programming	
  Contest
• Concurso	
  Internacional	
  de	
  Programação	
  para	
  
  Estudantes	
  Universitários
   – Olimpíadas	
  Regionais	
  e	
  Nacionais	
  Brasileiras	
  são	
  
     seleAvas	
  para	
  este	
  evento.
   – 5	
  Ames	
  do	
  Brasil	
  se	
  classificam	
  para	
  a	
  mundial
• Patrocinado	
  pela	
  IBM
• Finalistas	
  geralmente	
  são	
  contratados	
  por	
  
  empresas	
  como	
  Google,	
  Microsom,	
  Oracle,	
  IBM,	
  
  etc.
Exemplo:	
  Google	
  Code	
  Jam

• Concurso	
  de	
  programação	
  via	
  web	
  promovido	
  
  pela	
  Google
• No	
  próprio	
  formulário	
  de	
  inscrição	
  eles	
  já	
  
  perguntam	
  se	
  você	
  teria	
  interesse	
  em	
  trabalhar	
  
  na	
  Google	
  e	
  em	
  qual	
  sede	
  gostaria	
  de	
  ficar
• Finalistas	
  vão	
  para	
  Mountain	
  View
   – Prêmios	
  em	
  dinheiro	
  até	
  o	
  25o	
  lugar
   – 1o	
  Lugar	
  leva	
  U$5000,00
Exemplo:	
  TopCoder


• Site	
  com	
  concursos	
  periódicos	
  de	
  programação	
  
  patrocinados	
  por	
  diversas	
  empresas	
  (Google,	
  
  Yahoo,	
  etc)
• Distribui	
  prêmios	
  em	
  dinheiro	
  para	
  os	
  
  parAcipantes
• Várias	
  empresas	
  procuram	
  talentos	
  nos	
  
  rankings	
  do	
  TopCoder
Como	
  ParAcipar?




                     26
Pré-­‐Requisitos
• Gostar	
  de	
  Programar
• Gostar	
  de	
  Programar
• Saber	
  programar	
  em	
  alguma	
  linguagem
   • Para	
  OPLN:	
  Pascal,	
  C/C++	
  ou	
  Java

• Gostar	
  de	
  Programar
• Gostar	
  de	
  Programar
                                                       27
Regras
• O	
  parAcipante	
  recebe	
  um	
  caderno	
  com	
  as	
  questões	
  da	
  
  prova
• O	
  objeAvo	
  é	
  resolver	
  o	
  maior	
  número	
  de	
  questões	
  no	
  
  menor	
  tempo	
  possível
• O	
  parAcipante	
  escolhe	
  um	
  dos	
  problemas	
  que	
  ainda	
  
  não	
  resolveu,	
  preferencialmente	
  o	
  mais	
  fácil,	
  e	
  escreve	
  
  um	
  programa	
  que	
  produz	
  a	
  saída	
  especificada	
  no	
  
  enunciado	
  do	
  problema
• É	
  preciso	
  obedecer	
  ao	
  pé	
  da	
  letra	
  os	
  formatos	
  de	
  
  entrada	
  e	
  saída	
  especificados	
  no	
  problema
                                                                                 28
Exemplo:	
  	
  Alarme	
  de	
  Maria
                                 Entrada:

                                 1	
  5	
  3	
  5
                                 23	
  59	
  0	
  34
                                 21	
  33	
  21	
  10


Saída:             Saída:                               Saída:     Saída:

12	
  35	
  1417   Minutos	
  =	
  	
  12               12.0       12
                   Minutos	
  =	
  35	
                 35.0	
     35
                   Minutos	
  =	
  1417                 1417.0     1417


                                                                      29
Entrada	
  e	
  Saída
• Os	
  dados	
  de	
  entrada	
  são	
  sempre	
  lidos	
  do	
  teclado	
  (entrada	
  
  padrão)
     – Pascal:	
  read,	
  readln,	
  etc
     – C:	
  scanf,	
  getchar,	
  etc
     – C++:	
  cin,	
  scanf,	
  getchar,	
  etc
     – Java:	
  java.uAl.Scanner	
  	
  -­‐	
  Não	
  usar	
  JOpJonPane!
• Os	
  dados	
  de	
  saída	
  são	
  sempre	
  impressos	
  na	
  tela	
  (saída	
  padrão)
     –   Pascal:	
  write,	
  writeln
     –   C:	
  prinv
     –   C++:	
  cout,	
  prinv
     –   Java:	
  System.out.print,	
  System.out.println

                                                                                                30
Correção
• Quando	
  o	
  parAcipante	
  achar	
  que	
  resolveu	
  o	
  
  problema	
  ele	
  submete	
  a	
  solução	
  para	
  correção	
  
  por	
  um	
  juiz
• O	
  juiz	
  corrige	
  a	
  solução	
  e	
  retorna	
  
  imediatamente	
  uma	
  resposta
• A	
  correção	
  é	
  feita	
  de	
  forma	
  automáJca	
  
   – A	
  saída	
  precisar	
  seguir	
  a	
  especificação	
  do	
  problema
   – Os	
  limites	
  do	
  problema	
  serão	
  testados

                                                                          31
Respostas	
  do	
  Juíz
•   Correto
•   Incorreto
•   Erro	
  de	
  execução
•   Erro	
  de	
  compilação
•   Limite	
  de	
  tempo	
  excedido




                                           32
Pontuação
• Duas	
  métricas:
   – Número	
  de	
  problemas	
  resolvidos	
  (P)
   – Tempo	
  em	
  minutos	
  gastos	
  para	
  resolver	
  os	
  
     problemas	
  (T)
• Quando	
  o	
  parAcipante	
  resolve	
  um	
  problema:
   – P	
  =	
  P	
  +	
  1
   – T	
  =	
  T	
  +	
  tempo	
  desde	
  o	
  início	
  da	
  prova	
  +	
  Penalidade
   – Penalidade	
  =	
  x	
  *	
  20,	
  onde	
  x	
  é	
  o	
  número	
  de	
  
     tentaAvas	
  incorretas	
  para	
  resolver	
  este	
  problema!
                                                                                       33
Pontuação
• Todo	
  problema	
  tem	
  uma	
  entrada	
  e	
  uma	
  saída	
  de	
  exemplo
   – Não	
  se	
  iluda,	
  o	
  juiz	
  vai	
  testar	
  sua	
  solução	
  com	
  muitas	
  
        outras	
  entradas;
• Evite	
  enviar	
  a	
  solução	
  precipitadamente.	
  
   – 5	
  minutos	
  testando	
  sua	
  solução	
  é	
  melhor	
  do	
  que	
  20	
  
        minutos	
  de	
  penalidade;
• A	
  maioria	
  dos	
  problemas	
  possuem	
  cascas	
  de	
  bananas
   – É	
  preciso	
  testar	
  a	
  solução	
  antes	
  de	
  submeter
   – Testar	
  os	
  limites	
  descritos	
  no	
  problema

                                                                                           34
Preparação:	
  Treinar	
  para	
  que	
  se	
  
     eu	
  já	
  sei	
  o	
  que	
  fazer?




                                                  35
Preparação:	
  O	
  segredo	
  é	
  treinar!




                                               36
Como	
  Treinar?

• PraJcar	
  com	
  problemas	
  de	
  outras	
  olimpíadas
• Juízes	
  online
   – SPOJ:	
  br.spoj.pl
   – Programming	
  Challenges:	
  programming-­‐challenges.com
   – Universidade	
  de	
  Valladolid:	
  uva.onlinejudge.org




                                                                  37
Como	
  Treinar?

• ParJcipar	
  de	
  fóruns	
  e	
  grupos	
  de	
  discussão
• Todo	
  site	
  de	
  juiz	
  online	
  têm	
  um	
  fórum	
  onde	
  os	
  parAcipantes	
  
  discutem	
  como	
  resolver	
  os	
  problemas	
  propostos
• É	
  legal	
  primeiro	
  tentar	
  resolver	
  o	
  problema	
  e	
  só	
  recorrer	
  ao	
  
  fórum	
  ao	
  chegar	
  num	
  beco	
  sem	
  saída
• Opções	
  em	
  Português
     – hbps://br.spoj.pl/forum/
     – hbp://groups.google.com/group/algoritmos-­‐ccae


                                                                                               38
Preparação

• Livros	
  são	
  importantes!
   – Programming	
  Challenges	
  (Steven	
  S.	
  Skiena	
  e	
  
     Miguel	
  A.	
  Revilla)
   – IntroducAon	
  to	
  Algorithms	
  (Thomas	
  H.	
  Cormen,	
  
     Charles	
  E.	
  Leiserson,	
  Ronald	
  L.	
  Rivest)
   – The	
  Art	
  of	
  Computer	
  Programming,	
  Volume	
  1:	
  
     Fundamental	
  Algorithms	
  (Donald	
  E.	
  Knuth)
   – The	
  Art	
  of	
  Computer	
  Programming,	
  Volume	
  3:	
  
     SorAng	
  and	
  Searching	
  (Donald	
  E.	
  Knuth)
                                                                        39
Tipos	
  de	
  Problemas
• Triviais:	
  	
  ordenação,	
  fórmulas	
  matemáAcas,	
  números	
  
  primos,	
  fibonacci,	
  strings,	
  ...
• Geometria:	
  Interseção,	
  distância,	
  polígonos,	
  pontos,	
  ...
• Grafos:	
  busca	
  em	
  largura	
  e	
  profundidade,	
  
  conecAvidade,	
  menor	
  caminho,	
  cobertura,	
  fluxo	
  
  máximo	
  e	
  mínimo,	
  ...
• OAmização:	
  mochila	
  binária,maior	
  subsequência	
  
  comum,	
  ...
• Ad-­‐hoc:	
  Simulação	
  de	
  jogos,	
  ...
                                                                       40
Exemplos	
  de	
  Problemas:	
  Triviais
• Ordenação	
  por	
  Nota


             Exemplo	
  de	
  Entrada                   Exemplo	
  de	
  Saída


   5
                                        1	
  -­‐	
  João
   Pedro	
  8.3
                                        2	
  -­‐	
  Marcus
   Marcus	
  9.1
                                        3	
  -­‐	
  Leonardo
   João	
  10.0
                                        4	
  -­‐	
  Pedro
   Alysson	
  5.0
                                        5	
  -­‐	
  Alysson
   Leonardo	
  8.5



                                                                                 41
Exemplos	
  de	
  Problemas:	
  Triviais
• Quantos	
  números	
  primos	
  existem	
  em	
  um	
  
  intervalo?

             Exemplo	
  de	
  Entrada       Exemplo	
  de	
  Saída



   2	
  9                               4
   8	
  17                              3
   7	
  11                              2




                                                                     42
Exemplos	
  de	
  Problemas:	
  Ad	
  Hoc
• Mutant	
  Flatword	
  Explorers




            Exemplo	
  de	
  Entrada                Exemplo	
  de	
  Saída


   53
   11E
   RFRFRFRF                            11E
   32N                                 3 3 N LOST
   FRRFLLFFRRFLL                       23S
   03W
   LLFFFLFLFL                                                                43
Exemplos	
  de	
  Problemas:	
  Grafos
• Dado um conjunto de cidades e um conjunto de
  rodovias onde cada rodovia liga duas cidades, crie
  um programa que compute o menor caminho entre
  duas cidades.

         Exemplo	
  de	
  Entrada         Exemplo	
  de	
  Saída


   2
   Patos CampinaGrande 170
                                    290
   CampinaGrande JoaoPessoa 120
   1
   Patos JoaoPessoa


                                                                   44
Exemplos	
  de	
  Problemas:	
  
           Geometria
• Interseção de retângulos




             Exemplo	
  de	
  Entrada          Exemplo	
  de	
  Saída


  1336
                                        2334
  2 1 11 4

                                                                        45
Resolvendo	
  um	
  Problema	
  de	
  
          Olimpíada
• Feynman: http://br.spoj.pl/problems/FEYNMAN/




                                                 46

Más contenido relacionado

Similar a Olimpíadas Programação: O que, Por que e Como

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
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Robson Ferreira
 
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Alex Camargo
 
(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
 
Implementacao de Algoritmos.ppt
 Implementacao de Algoritmos.ppt Implementacao de Algoritmos.ppt
Implementacao de Algoritmos.pptTopsAvakinImvu
 
ALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.pptALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.pptRogrioRikerSantana
 
ALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.pptALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.pptFabio Faria
 
(A03) LabMM3 - Introdução à programação
(A03) LabMM3 - Introdução à programação(A03) LabMM3 - Introdução à programação
(A03) LabMM3 - Introdução à programaçãoCarlos Santos
 
Pensamento Computacional.................................
Pensamento Computacional.................................Pensamento Computacional.................................
Pensamento Computacional.................................AnabelaAlferes
 
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas MatemáticosRaciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas MatemáticosAndré Constantino da Silva
 
01. introducao a_logica_de_programacao
01. introducao a_logica_de_programacao01. introducao a_logica_de_programacao
01. introducao a_logica_de_programacaoTânia Rodrigues
 
T02_LM3: Introdução à algoritmia (2013-2014)
T02_LM3: Introdução à algoritmia (2013-2014)T02_LM3: Introdução à algoritmia (2013-2014)
T02_LM3: Introdução à algoritmia (2013-2014)Carlos Santos
 
Apresentação 1 testing dojo paraiba
Apresentação 1 testing dojo paraibaApresentação 1 testing dojo paraiba
Apresentação 1 testing dojo paraibaJeremias Araujo
 

Similar a Olimpíadas Programação: O que, Por que e Como (20)

Algoritmos - Aula 01 B - Introducao
Algoritmos - Aula 01 B - IntroducaoAlgoritmos - Aula 01 B - Introducao
Algoritmos - Aula 01 B - Introducao
 
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
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2Conceitos e técnicas de programação aula 2
Conceitos e técnicas de programação aula 2
 
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
 
(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação
 
02 while
02 while02 while
02 while
 
Implementacao de Algoritmos.ppt
 Implementacao de Algoritmos.ppt Implementacao de Algoritmos.ppt
Implementacao de Algoritmos.ppt
 
ALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.pptALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.ppt
 
ALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.pptALG 01 - Implementacao de Algoritmos.ppt
ALG 01 - Implementacao de Algoritmos.ppt
 
(A03) LabMM3 - Introdução à programação
(A03) LabMM3 - Introdução à programação(A03) LabMM3 - Introdução à programação
(A03) LabMM3 - Introdução à programação
 
Pensamento Computacional.................................
Pensamento Computacional.................................Pensamento Computacional.................................
Pensamento Computacional.................................
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas MatemáticosRaciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
Raciocínio Lógico Aplicado a Resolução de Problemas Matemáticos
 
Algoritmo aula 01-f
Algoritmo   aula 01-fAlgoritmo   aula 01-f
Algoritmo aula 01-f
 
01. introducao a_logica_de_programacao
01. introducao a_logica_de_programacao01. introducao a_logica_de_programacao
01. introducao a_logica_de_programacao
 
03 algoritmos basicos
03 algoritmos basicos03 algoritmos basicos
03 algoritmos basicos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
T02_LM3: Introdução à algoritmia (2013-2014)
T02_LM3: Introdução à algoritmia (2013-2014)T02_LM3: Introdução à algoritmia (2013-2014)
T02_LM3: Introdução à algoritmia (2013-2014)
 
Apresentação 1 testing dojo paraiba
Apresentação 1 testing dojo paraibaApresentação 1 testing dojo paraiba
Apresentação 1 testing dojo paraiba
 

Más de Alexandre Duarte

Táticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosTáticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosAlexandre Duarte
 
Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Alexandre Duarte
 
Escolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaEscolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaAlexandre Duarte
 
Ciência da Computação como Ciência
Ciência da Computação como CiênciaCiência da Computação como Ciência
Ciência da Computação como CiênciaAlexandre Duarte
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: IntroduçãoAlexandre Duarte
 
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerGráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerAlexandre Duarte
 
Panorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBPanorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBAlexandre Duarte
 
Sumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisSumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisAlexandre Duarte
 
Correlação e Classificação
Correlação e ClassificaçãoCorrelação e Classificação
Correlação e ClassificaçãoAlexandre Duarte
 
Sumarização Estatística 2D
Sumarização Estatística 2DSumarização Estatística 2D
Sumarização Estatística 2DAlexandre Duarte
 
Sumarização Estatística 1D
Sumarização Estatística 1DSumarização Estatística 1D
Sumarização Estatística 1DAlexandre Duarte
 
Preparação e Limpeza de Dados
Preparação e Limpeza de DadosPreparação e Limpeza de Dados
Preparação e Limpeza de DadosAlexandre Duarte
 
Introdução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosIntrodução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosAlexandre Duarte
 
Introdução ao Projeto de Surveys
Introdução ao Projeto de SurveysIntrodução ao Projeto de Surveys
Introdução ao Projeto de SurveysAlexandre Duarte
 
Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Alexandre Duarte
 

Más de Alexandre Duarte (20)

Projeto de Experimentos
Projeto de ExperimentosProjeto de Experimentos
Projeto de Experimentos
 
Táticas para Projeto de Experimentos
Táticas para Projeto de ExperimentosTáticas para Projeto de Experimentos
Táticas para Projeto de Experimentos
 
Causalidade e Abdução
Causalidade e AbduçãoCausalidade e Abdução
Causalidade e Abdução
 
Fazer Ciência é Difícil!
Fazer Ciência é Difícil!Fazer Ciência é Difícil!
Fazer Ciência é Difícil!
 
Atividades Científica
Atividades CientíficaAtividades Científica
Atividades Científica
 
Escolhendo um Projeto de Pesquisa
Escolhendo um Projeto de PesquisaEscolhendo um Projeto de Pesquisa
Escolhendo um Projeto de Pesquisa
 
Ciência da Computação como Ciência
Ciência da Computação como CiênciaCiência da Computação como Ciência
Ciência da Computação como Ciência
 
Metodologia da Pesquisa Científica: Introdução
Metodologia da Pesquisa Científica:  IntroduçãoMetodologia da Pesquisa Científica:  Introdução
Metodologia da Pesquisa Científica: Introdução
 
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazerGráficos: 10 dicas sobre o que fazer e sobre o que não fazer
Gráficos: 10 dicas sobre o que fazer e sobre o que não fazer
 
Panorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPBPanorama de Pesquisas em Análise de Dados na UFPB
Panorama de Pesquisas em Análise de Dados na UFPB
 
Agrupamento com K-Means
Agrupamento com K-MeansAgrupamento com K-Means
Agrupamento com K-Means
 
Sumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis NominaisSumarização Estatística 2D: Variáveis Nominais
Sumarização Estatística 2D: Variáveis Nominais
 
Correlação e Classificação
Correlação e ClassificaçãoCorrelação e Classificação
Correlação e Classificação
 
Sumarização Estatística 2D
Sumarização Estatística 2DSumarização Estatística 2D
Sumarização Estatística 2D
 
Sumarização Estatística 1D
Sumarização Estatística 1DSumarização Estatística 1D
Sumarização Estatística 1D
 
Transformação de Dados
Transformação de DadosTransformação de Dados
Transformação de Dados
 
Preparação e Limpeza de Dados
Preparação e Limpeza de DadosPreparação e Limpeza de Dados
Preparação e Limpeza de Dados
 
Introdução ao Projeto de Experimentos
Introdução ao Projeto de ExperimentosIntrodução ao Projeto de Experimentos
Introdução ao Projeto de Experimentos
 
Introdução ao Projeto de Surveys
Introdução ao Projeto de SurveysIntrodução ao Projeto de Surveys
Introdução ao Projeto de Surveys
 
Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01Introdução à Análise de Dados - Aula 01
Introdução à Análise de Dados - Aula 01
 

Olimpíadas Programação: O que, Por que e Como

  • 1. Olimpíadas  de  Programação:   O  que,  Por  que  e  Como? Alexandre  Duarte   aalexandrend@gmail.com
  • 2. Agenda • O  que  é  uma  Olimpíada  de  Programação? • Por  que  parAcipar  ? • Como  parAcipar  ? – Regras – Preparação – Tipos  de  Problemas – Resolvendo  um  Problema
  • 3. O  que  é  uma  Olimpíada  de   Programação? 3
  • 4. O  que  é  uma  Olimpíada  de   Programação? • CompeAção  individual  ou  por  equipes – Um  único  computador  em  ambos  os  casos • ParAcipantes  recebem  um  conjunto  de  problemas   para  resolver  em  um  tempo  limitado • Vence  quem  resolve  o  maior  número  de  problemas   no  menor  tempo – Resolver  significa  apenas  produzir  a  saída  correta  para   um  determinado  conjunto  de  entradas!
  • 5. O  que  é  uma  Olimpíada  de   Programação? • É  um  exercício  de  criaAvidade  e  habilidade  para   trabalhar  sob  pressão • É  uma  compeAção! • É  uma  brincadeira! • É  uma  vitrine  para  você!
  • 6. Exemplo  de  Problema:   Alarme  de  Maria • Dados  a  hora  e  minuto  em  que  Maria  dormiu  e   a  hora  e  minuto  em  que  o  despertador  dela  vai   tocar,  calcule  a  quanAdade  de  minutos  de  sono   que  Maria  terá. Entrada Saída 1  5  3  5 120 23  59  0  34 35 21  33  21  10 1417
  • 7. “Circuito  Mundial”  de   Olimpíadas  de  Programação • Olimpíadas  locais  para  escolher  equipes  para   as  regionais • Olimpíadas  regionais  para  escolher  equipes   para  as  nacionais • Olimpíadas  nacionais  para  escolher  equipes   para  a  final  mundial • Final  mundial... • Google,  Microso=,  Yahoo,  IBM,  Oracle,  etc.
  • 8. Situação  no  Brasil  em  2009 • 46  sedes  regionais • 411  equipes  inscritas • 52  equipes  classificadas  para  a  Nacional – Incluindo  uma  equipe  da  UFCG • 5  equipes  se  classificarão  depois  de  amanhã   para  a  final  Mundial  na  China   – hbp://maratona.ime.usp.br/final09.html
  • 9. Regional  de  2009  (sede  UFCG)
  • 10. Regional  de  2009  (sede  UFCG)
  • 11. Regional  de  2009  (sede  UFCG)
  • 12. Regional  de  2009  (sede  UFCG)
  • 13. Situação  no  Mundo  em  2008 • 88  países   • 1838  insAtuições • cerca  de  7100  equipes • 100  equipes  classificadas  para  a  final  Mundial  
  • 14. Final  Mundial  de  2008  em   Estocolmo  -­‐  Suécia
  • 15. Final  Mundial  de  2008  em   Estocolmo  -­‐  Suécia
  • 16. Final  Mundial  de  2008  em   Estocolmo  -­‐  Suécia
  • 17. Final  Mundial  de  2008  em   Estocolmo  -­‐  Suécia
  • 18. I  Olimpíada  de  Programação  do   Litoral  Norte • CompeAção  individual  para  moAvar  os  alunos   a  formarem  Ames  para  treinar  e  representar  o   CCAE/UFPB  nas  regionais  de  2010 • 4  horas  de  duração • Prova  com  vários  (8  ou  mais)  problemas  de   diferentes  níveis  de  dificuldade • Pode-­‐se  uAlizar  qualquer  material  impresso – Livros,  algoritmos,  anotações,  etc...
  • 19. I  Olimpíada  de  Programação  do   Litoral  Norte • Duas  categorias – Iniciante  (apenas  para  alunos  matriculados  em  sua   primeira  disciplina  de  programação) – Avançado  (demais  alunos) • Premiação  para  os  três  primeiros  colocados  de   cada  categoria • Todos  os  parAcipantes  serão  convidados  a   parAcipar  de  um  treinamento  para  parAcipar  de   outras  olimpíadas  de  programação
  • 20. Por  que  devo  parAcipar  de  uma   Olimpíada  de  Programação?
  • 21. Por  que  devo  parAcipar  de   Olimpíadas  de  Programação? • É  diverAdo! • É  desafiador! • Empresas  (e  os  professores)  estão  sempre  de   olho  nos  alunos  que  parJcipam  deste  Jpo  de   compeJção! • Cuidado:  Pode  causar  dependência!
  • 22. ParAcipando  de  Olimpíadas   de  Programação  você  vai... • Viajar – conhecer  lugares  novos – conhecer  gente  nova • Se  relacionar  com  alunos  e  professores  de   outras  universidades – Networking • Aprender  algoritmos  e  técnicas  de  programação   que  provavelmente  não  veria  na  sala  de  aula
  • 23. Exemplo:  ACM  Interna+onal   Collegiate  Programming  Contest • Concurso  Internacional  de  Programação  para   Estudantes  Universitários – Olimpíadas  Regionais  e  Nacionais  Brasileiras  são   seleAvas  para  este  evento. – 5  Ames  do  Brasil  se  classificam  para  a  mundial • Patrocinado  pela  IBM • Finalistas  geralmente  são  contratados  por   empresas  como  Google,  Microsom,  Oracle,  IBM,   etc.
  • 24. Exemplo:  Google  Code  Jam • Concurso  de  programação  via  web  promovido   pela  Google • No  próprio  formulário  de  inscrição  eles  já   perguntam  se  você  teria  interesse  em  trabalhar   na  Google  e  em  qual  sede  gostaria  de  ficar • Finalistas  vão  para  Mountain  View – Prêmios  em  dinheiro  até  o  25o  lugar – 1o  Lugar  leva  U$5000,00
  • 25. Exemplo:  TopCoder • Site  com  concursos  periódicos  de  programação   patrocinados  por  diversas  empresas  (Google,   Yahoo,  etc) • Distribui  prêmios  em  dinheiro  para  os   parAcipantes • Várias  empresas  procuram  talentos  nos   rankings  do  TopCoder
  • 27. Pré-­‐Requisitos • Gostar  de  Programar • Gostar  de  Programar • Saber  programar  em  alguma  linguagem • Para  OPLN:  Pascal,  C/C++  ou  Java • Gostar  de  Programar • Gostar  de  Programar 27
  • 28. Regras • O  parAcipante  recebe  um  caderno  com  as  questões  da   prova • O  objeAvo  é  resolver  o  maior  número  de  questões  no   menor  tempo  possível • O  parAcipante  escolhe  um  dos  problemas  que  ainda   não  resolveu,  preferencialmente  o  mais  fácil,  e  escreve   um  programa  que  produz  a  saída  especificada  no   enunciado  do  problema • É  preciso  obedecer  ao  pé  da  letra  os  formatos  de   entrada  e  saída  especificados  no  problema 28
  • 29. Exemplo:    Alarme  de  Maria Entrada: 1  5  3  5 23  59  0  34 21  33  21  10 Saída: Saída: Saída: Saída: 12  35  1417 Minutos  =    12 12.0 12 Minutos  =  35   35.0   35 Minutos  =  1417 1417.0 1417 29
  • 30. Entrada  e  Saída • Os  dados  de  entrada  são  sempre  lidos  do  teclado  (entrada   padrão) – Pascal:  read,  readln,  etc – C:  scanf,  getchar,  etc – C++:  cin,  scanf,  getchar,  etc – Java:  java.uAl.Scanner    -­‐  Não  usar  JOpJonPane! • Os  dados  de  saída  são  sempre  impressos  na  tela  (saída  padrão) – Pascal:  write,  writeln – C:  prinv – C++:  cout,  prinv – Java:  System.out.print,  System.out.println 30
  • 31. Correção • Quando  o  parAcipante  achar  que  resolveu  o   problema  ele  submete  a  solução  para  correção   por  um  juiz • O  juiz  corrige  a  solução  e  retorna   imediatamente  uma  resposta • A  correção  é  feita  de  forma  automáJca   – A  saída  precisar  seguir  a  especificação  do  problema – Os  limites  do  problema  serão  testados 31
  • 32. Respostas  do  Juíz • Correto • Incorreto • Erro  de  execução • Erro  de  compilação • Limite  de  tempo  excedido 32
  • 33. Pontuação • Duas  métricas: – Número  de  problemas  resolvidos  (P) – Tempo  em  minutos  gastos  para  resolver  os   problemas  (T) • Quando  o  parAcipante  resolve  um  problema: – P  =  P  +  1 – T  =  T  +  tempo  desde  o  início  da  prova  +  Penalidade – Penalidade  =  x  *  20,  onde  x  é  o  número  de   tentaAvas  incorretas  para  resolver  este  problema! 33
  • 34. Pontuação • Todo  problema  tem  uma  entrada  e  uma  saída  de  exemplo – Não  se  iluda,  o  juiz  vai  testar  sua  solução  com  muitas   outras  entradas; • Evite  enviar  a  solução  precipitadamente.   – 5  minutos  testando  sua  solução  é  melhor  do  que  20   minutos  de  penalidade; • A  maioria  dos  problemas  possuem  cascas  de  bananas – É  preciso  testar  a  solução  antes  de  submeter – Testar  os  limites  descritos  no  problema 34
  • 35. Preparação:  Treinar  para  que  se   eu  já  sei  o  que  fazer? 35
  • 36. Preparação:  O  segredo  é  treinar! 36
  • 37. Como  Treinar? • PraJcar  com  problemas  de  outras  olimpíadas • Juízes  online – SPOJ:  br.spoj.pl – Programming  Challenges:  programming-­‐challenges.com – Universidade  de  Valladolid:  uva.onlinejudge.org 37
  • 38. Como  Treinar? • ParJcipar  de  fóruns  e  grupos  de  discussão • Todo  site  de  juiz  online  têm  um  fórum  onde  os  parAcipantes   discutem  como  resolver  os  problemas  propostos • É  legal  primeiro  tentar  resolver  o  problema  e  só  recorrer  ao   fórum  ao  chegar  num  beco  sem  saída • Opções  em  Português – hbps://br.spoj.pl/forum/ – hbp://groups.google.com/group/algoritmos-­‐ccae 38
  • 39. Preparação • Livros  são  importantes! – Programming  Challenges  (Steven  S.  Skiena  e   Miguel  A.  Revilla) – IntroducAon  to  Algorithms  (Thomas  H.  Cormen,   Charles  E.  Leiserson,  Ronald  L.  Rivest) – The  Art  of  Computer  Programming,  Volume  1:   Fundamental  Algorithms  (Donald  E.  Knuth) – The  Art  of  Computer  Programming,  Volume  3:   SorAng  and  Searching  (Donald  E.  Knuth) 39
  • 40. Tipos  de  Problemas • Triviais:    ordenação,  fórmulas  matemáAcas,  números   primos,  fibonacci,  strings,  ... • Geometria:  Interseção,  distância,  polígonos,  pontos,  ... • Grafos:  busca  em  largura  e  profundidade,   conecAvidade,  menor  caminho,  cobertura,  fluxo   máximo  e  mínimo,  ... • OAmização:  mochila  binária,maior  subsequência   comum,  ... • Ad-­‐hoc:  Simulação  de  jogos,  ... 40
  • 41. Exemplos  de  Problemas:  Triviais • Ordenação  por  Nota Exemplo  de  Entrada Exemplo  de  Saída 5 1  -­‐  João Pedro  8.3 2  -­‐  Marcus Marcus  9.1 3  -­‐  Leonardo João  10.0 4  -­‐  Pedro Alysson  5.0 5  -­‐  Alysson Leonardo  8.5 41
  • 42. Exemplos  de  Problemas:  Triviais • Quantos  números  primos  existem  em  um   intervalo? Exemplo  de  Entrada Exemplo  de  Saída 2  9 4 8  17 3 7  11 2 42
  • 43. Exemplos  de  Problemas:  Ad  Hoc • Mutant  Flatword  Explorers Exemplo  de  Entrada Exemplo  de  Saída 53 11E RFRFRFRF 11E 32N 3 3 N LOST FRRFLLFFRRFLL 23S 03W LLFFFLFLFL 43
  • 44. Exemplos  de  Problemas:  Grafos • Dado um conjunto de cidades e um conjunto de rodovias onde cada rodovia liga duas cidades, crie um programa que compute o menor caminho entre duas cidades. Exemplo  de  Entrada Exemplo  de  Saída 2 Patos CampinaGrande 170 290 CampinaGrande JoaoPessoa 120 1 Patos JoaoPessoa 44
  • 45. Exemplos  de  Problemas:   Geometria • Interseção de retângulos Exemplo  de  Entrada Exemplo  de  Saída 1336 2334 2 1 11 4 45
  • 46. Resolvendo  um  Problema  de   Olimpíada • Feynman: http://br.spoj.pl/problems/FEYNMAN/ 46