olimpiadas programação: o que, por que e como?

46
Olimpíadas de Programação: O que, Por que e Como? Alexandre Duarte [email protected]

Upload: alexandre-duarte

Post on 06-Jul-2015

3.355 views

Category:

Sports


2 download

TRANSCRIPT

Page 1: Olimpiadas Programação: O que, Por que e Como?

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

Alexandre  Duarte  [email protected]

Page 2: Olimpiadas Programação: O que, Por que e Como?

Agenda

• O  que  é  uma  Olimpíada  de  Programação?

• Por  que  parAcipar  ?

• Como  parAcipar  ?– Regras– Preparação– Tipos  de  Problemas

– Resolvendo  um  Problema

Page 3: Olimpiadas Programação: O que, Por que e Como?

3

O  que  é  uma  Olimpíada  de  Programação?

Page 4: Olimpiadas Programação: O que, Por que e Como?

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!

Page 5: Olimpiadas Programação: O que, Por que e Como?

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ê!

Page 6: Olimpiadas Programação: O que, Por que e Como?

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

Page 7: Olimpiadas Programação: O que, Por que e Como?

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

Page 8: Olimpiadas Programação: O que, Por que e Como?

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

Page 9: Olimpiadas Programação: O que, Por que e Como?

Regional  de  2009  (sede  UFCG)

Page 10: Olimpiadas Programação: O que, Por que e Como?

Regional  de  2009  (sede  UFCG)

Page 11: Olimpiadas Programação: O que, Por que e Como?

Regional  de  2009  (sede  UFCG)

Page 12: Olimpiadas Programação: O que, Por que e Como?

Regional  de  2009  (sede  UFCG)

Page 13: Olimpiadas Programação: O que, Por que e Como?

Situação  no  Mundo  em  2008

• 88  países  

• 1838  insAtuições

• cerca  de  7100  equipes

• 100  equipes  classificadas  para  a  final  Mundial  

Page 14: Olimpiadas Programação: O que, Por que e Como?

Final  Mundial  de  2008  em  Estocolmo  -­‐  Suécia

Page 15: Olimpiadas Programação: O que, Por que e Como?

Final  Mundial  de  2008  em  Estocolmo  -­‐  Suécia

Page 16: Olimpiadas Programação: O que, Por que e Como?

Final  Mundial  de  2008  em  Estocolmo  -­‐  Suécia

Page 17: Olimpiadas Programação: O que, Por que e Como?

Final  Mundial  de  2008  em  Estocolmo  -­‐  Suécia

Page 18: Olimpiadas Programação: O que, Por que e Como?

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

Page 19: Olimpiadas Programação: O que, Por que e Como?

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

Page 20: Olimpiadas Programação: O que, Por que e Como?

Por  que  devo  parAcipar  de  uma  Olimpíada  de  Programação?

Page 21: Olimpiadas Programação: O que, Por que e Como?

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!

Page 22: Olimpiadas Programação: O que, Por que e Como?

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

Page 23: Olimpiadas Programação: O que, Por que e Como?

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.

Page 24: Olimpiadas Programação: O que, Por que e Como?

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

Page 25: Olimpiadas Programação: O que, Por que e Como?

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

Page 26: Olimpiadas Programação: O que, Por que e Como?

Como  ParAcipar?

26

Page 27: Olimpiadas Programação: O que, Por que e Como?

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

Page 28: Olimpiadas Programação: O que, Por que e Como?

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

Page 29: Olimpiadas Programação: O que, Por que e Como?

Exemplo:    Alarme  de  Maria

29

Entrada:

1  5  3  523  59  0  3421  33  21  10

Saída:

12  35  1417

Saída:

Minutos  =    12Minutos  =  35  Minutos  =  1417

Saída:

12.035.0  1417.0

Saída:

12351417

Page 30: Olimpiadas Programação: O que, Por que e Como?

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

Page 31: Olimpiadas Programação: O que, Por que e Como?

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

Page 32: Olimpiadas Programação: O que, Por que e Como?

Respostas  do  Juíz

• Correto

• Incorreto

• Erro  de  execução

• Erro  de  compilação

• Limite  de  tempo  excedido

32

Page 33: Olimpiadas Programação: O que, Por que e Como?

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

Page 34: Olimpiadas Programação: O que, Por que e Como?

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

Page 35: Olimpiadas Programação: O que, Por que e Como?

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

35

Page 36: Olimpiadas Programação: O que, Por que e Como?

Preparação:  O  segredo  é  treinar!

36

Page 37: Olimpiadas Programação: O que, Por que e Como?

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

Page 38: Olimpiadas Programação: O que, Por que e Como?

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

Page 39: Olimpiadas Programação: O que, Por que e Como?

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

Page 40: Olimpiadas Programação: O que, Por que e Como?

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

Page 41: Olimpiadas Programação: O que, Por que e Como?

Exemplos  de  Problemas:  Triviais

• Ordenação  por  Nota

41

Exemplo  de  Entrada Exemplo  de  Saída

5Pedro  8.3Marcus  9.1João  10.0Alysson  5.0Leonardo  8.5

1  -­‐  João2  -­‐  Marcus3  -­‐  Leonardo4  -­‐  Pedro5  -­‐  Alysson

Page 42: Olimpiadas Programação: O que, Por que e Como?

Exemplos  de  Problemas:  Triviais

• Quantos  números  primos  existem  em  um  intervalo?

42

Exemplo  de  Entrada Exemplo  de  Saída

2  98  177  11

432

Page 43: Olimpiadas Programação: O que, Por que e Como?

Exemplos  de  Problemas:  Ad  Hoc

• Mutant  Flatword  Explorers

43

Exemplo  de  Entrada Exemplo  de  Saída

5 3 1 1 ERFRFRFRF3 2 N FRRFLLFFRRFLL 0 3 WLLFFFLFLFL

1 1 E3 3 N LOST 2 3 S

Page 44: Olimpiadas Programação: O que, Por que e Como?

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.

44

Exemplo  de  Entrada Exemplo  de  Saída

2 Patos CampinaGrande 170 CampinaGrande JoaoPessoa 1201Patos JoaoPessoa

290

Page 45: Olimpiadas Programação: O que, Por que e Como?

Exemplos  de  Problemas:  Geometria

• Interseção de retângulos

45

Exemplo  de  Entrada Exemplo  de  Saída

1 3 3 6 2 1 11 4 2 3 3 4

Page 46: Olimpiadas Programação: O que, Por que e Como?

Resolvendo  um  Problema  de  Olimpíada

• Feynman: http://br.spoj.pl/problems/FEYNMAN/

46