Programação Competitiva
Ementa
Revisão de conceitos de programação e algoritmos. Fundamentos de análise de algoritmos. Algoritmos de busca e ordenação. Estrutura de dados básicas e avançadas. Teoria dos números. Paradigmas de soluções de problemas: busca exaustiva, dividir para conquistar, algoritmo guloso e programação dinâmica. Grafos. Processamento de strings. Geometria computacional.
Objetivos
- Introduzir técnicas de programação e noções de complexidade de algoritmos;
- Familiarização com ambientes de treinamento de competições de programação;
- Estudar estruturas de dados básicas e avançadas comumente utilizadas em competições de programação;
- Estudar algoritmos eficientes de busca e ordenação de dados;
- Estudar diferentes teorias de números;
- Apresentar e estudar diferentes tipos de paradigmas de soluções de problemas;
- Apresentar os conceitos e os principais algoritmos de grafos;
- Apresentar e estudar os algoritmos de processamento de strings e geometria computacional;
- Identificar qual o melhor algoritmo ou estratégia deve ser usada para resolver diferentes problemas.
Programas e Sites
- Programar offline:
- GCC (Linux) / MinGW (Windows)
- VS Code / Sublime Text
- Programar online:
- CS50 IDE
-
Judge: Maratona
Bibliografia
- Competitive Programmer’s Handbook
- Principles of Algorithmic Problem Solving
- Algorithms for Competitive Programming
- An Introduction to the USA Computing Olympiad
- Dynamic Programming for Computing Contest
- Algorithms
- Learn C++