Preparação
Para se tornar um campeão de programação é preciso passar por diversas etapas.
- Escolher a linguagem.
- Dominar sintaxe e comandos básicos.
- Dominar as funções mais usadas em competições.
- Noções de Complexidade de Algoritmos
- Calcular complexidade de tempo e memória.
- Estimativa de tempo.
- Dominar as estruturas de dados básicas.
- Vetores, strings.
- Pilha, fila.
- Dominar Entrada e Saída
- Leitura dos diferentes tipos.
- Saída formatada dos diferentes tipos.
- Ficar à vontade com Recursão e Backtracking.
- Saber enumerar permutações, combinações e arranjos.
- Aprender Grafos.
- Estruturas para representá-los.
- Algoritmos de busca: BFS, DFS.
- Árvore Geradora Mínima.
- Caminhos mínimos.
- Aprender Programação Dinâmica.
- Entender a idéia.
- Conhecer os problemas clássico.
Com isso já é possível alcançar resultados muito bons nas competições de programação tradicionais. Antes de partir para Geometria Computacional e problemas Matemáticas é melhor tentar se aperfeiçoar em Programação Dinâmica e principalmente em Grafos.
Veja também o texto sobre como começar a se preparar da Regional Mid-Central dos EUA.