Informática Para Olimpíada

cs161logo

A IOI, Olimpíada Internacional de Informática, existe de 1989, ou seja, é uma olimpíada considerada recente. A Olimpíada Internacional possui apenas a modalidade de Programação. Porém, a olimpíada nacional e muitas regionais possuem também a modalidade de Iniciação, que é formada por questões de lógica matemática, área de bastante utilidade para programação. Para os universitários, há a Maratona de Programação, que é uma competição realizada em equipe e possui um estilo um pouco diferente das Olimpíadas.

Modalidade Iniciação

Como dito anteriormente, esta é composta de questões de lógica. A intenção deste nível é que os alunos tenham maior facilidade quando forem aprender programação no futuro. No caso da OBI, o aluno tem direito a viajar para a Semana Olímpica de treinamento pela modalidade Iniciação apenas uma vez.

A OBI possui dois níveis nesta modalidade. O nível 1 é destinado para alunos do 6º e 7º anos do Ensino Fundamental e o nível 2 é destinado para alunos do 8º e 9º.

Questões para estudo podem ser encontradas no site da OBI. Clique aqui para acessar o site. O livro Jogos de Lógica também pode ser bem útil, mostrando cada tipo de problema abordado na prova.

 Modalidade Programação

Esta é a modalidade principal de qualquer olimpíada de informática, sendo também a mais difícil. Nas Olimpíadas e Maratonas de Programação, a correção é feita testando-se seu programa (os chamados "Casos de Teste") e sua pontuação em um problema é dada de acordo com o número de vezes que seu programa respondeu o caso corretamente e dentro do tempo limite permitido para o seu programa.

Você pode ter acesso aos assuntos que podem cair no seu nível da OBI consultando a ementa. O Noic possui o seu próprio curso de programação, que aborda vários desses assuntos e é recomendado tanto a alunos inexperientes que nunca programaram na vida e querem aprender do zero, como a alunos mais experientes que estão buscando apenas conhecimento sobre um assunto específico. Todo o conteúdo necessário para Programação 1 e Júnior estão aqui. Clique para ter acesso ao Curso Noic de Informática.

No site da OBI, há uma apostila recomendada para iniciantes em programação (Clique aqui para acessa-la). Há também uma apostila para iniciantes em C feita pela UFMG (Clique aqui para acessa-la). O que mais constitui uma Olimpíada de Programação não são os conhecimentos de programação, mas sim os algoritmos. Há bons livros para isso:

Competitive Programming, Steven Halim e Felix Halim: Este livro é o que o Noic mais recomenda para um treinamento avançado de competições de programação, contendo vários problemas interessantes que misturam algoritmos conhecidos, truques legais e sacadas importantes usadas nas mais variadas competições de programação.

Looking for a Challenge, Vários autores: Este é um bom livro para treinar resolução de problemas criativos e diferentes. Cada autor traz um problema, em seguida mostra uma dica e a solução. A partir do momento que você já conhece alguns algoritmos, é interessante buscar resoluções espertas aqui.

- Introdução a Algoritmos, Thomas Cormen: Este livro é indicado para se aprender algoritmos mais a fundo, pois sua abordagem é excelente e é um livro muito rico em conteúdos, porém alguns de seus conteúdos não são práticos para competições de programação do nível fundamental e médio (como o capítulo de árvore rubro-negra). Recomendamos que use como referência, consultando em conteúdos específicos quando for necessário.

- The Algorithm Design Manual, Steven Skiena: Também é um excelente livro que fala de uma boa quantidade de algoritmos.

Para se treinar a resolução de questões, há os chamados Juízes Online. Estes possuem um número muito grande de questões, no qual você resolve a questão, submete seu código e o Juiz o corrige, dizendo se seu programa acertou completamente o problema ou não.

Juízes Recomendados

Os sites a seguir são recomendados para o estudo de programação.

  • CodCad: Esse é o juiz que o Noic mais recomenda. Além de conter várias questões ordenadas por tópicos e por dificuldade, ele também contém um curso que leva o aluno desde o básico da programação, até o nível necessário para competir no nível final da Olimpíada Brasileira de Informática. Todo o material é em Português e está sendo traduzido pro Inglês.
  • Pratique OBI: Possui questões de edições antigas da OBI. Não é necessário se registrar ao site para se corrigir as questões.
  • USACO: USACO vem de USA Computing Olympiad, que é a Olimpíada Americana de Informática. Este site não é exatamente um Juiz Online, é um site de treinamento. É dividido em várias sessões, e cada sessão só é liberada após se completar a anterior. Por ser da Olimpíada Americana, o site é em inglês. É necessário se registrar ao site.
  • cppreference: É um site de referência sobre C++. É muito bom para aprender a se usar estruturas ou funções que são novas para você.
  • DMOJ: Traz problemas interessantes separados por nível de dificuldade e assunto. É necessário conta e os problemas estão em inglês. Altamente recomendado.
  • Codeforces: É um juiz com muitos problemas de vários níveis, além de conter problemas de competições do mundo inteiro, além de ter torneios com certa constância, úteis para treinar seus conhecimentos, velocidade e habilidade em prova. Os problemas são disponíveis em inglês e em russo. É necessário se registrar ao site para corrigir seu código.
  • SPOJ Brasil: Baseado no site da SPOJ Internacional. Os problemas são todos em português. É necessário se registrar ao site para corrigir seu código.
  • SPOJ Internacional: É a sigla de Sphere Online Judge. Possui uma grande quantidade de problemas, todos em inglês. É necessário se registrar ao site para corrigir seu código.
  • TopCoder: Algo muito interessante deste site é a sua seção de tutoriais, que possui bons materiais falando sobre determinados algoritmos ou estruturas de dados. Possui muitas questões e competições. É necessário se registrar e baixar o Applet do site para poder ter acesso às questões.
  • URI Online Judge: Uma das maiores vantagens deste site é que ele separa as questões por modalidade e por nível de dificuldade. É necessário criar uma conta para submeter seus problemas.
  • UVa Online Judge: É o Juiz da Universidade de Valladolid, na Espanha. Possui um número incrivelmente alto de questões dos mais diversos tipos, todas em inglês. É necessário se registrar ao site para corrigir seu código.
  • oj.uz – Um dos judges com a maior quantidade de problemas de diferentes olimpíadas, como a JOI (olimpíada do Japão), APIO (Ásia-Pacífico), além da própria IOI.

Outras olimpíadas internacionais

  • BOI
  • APIO
  • EJOI
  • JOIOC
  • CEOI
  • Romenian Masters
  • Balkans

Olímpiadas nacionais

  • JOI
  • JOISC
  • USACO
  • COCI
  • POI
  • CCC
  • CCO

Outra forma de estudo indicado é resolver problemas de olimpíadas de outros países. A COCI, olimpíada Croata, traz problemas interessantes e suas soluções. A Japonesa, Polonesa e Centro-Europeia também são recomendadas.