Neste texto, vou tentar explicar um pouco sobre algumas características de programação competitiva que serão vistas em algoritmos avançados, e também dar algumas dicas mais gerais de linguagens que normalmente são úteis. Se alguém tiver alguma sugestão ou encontrar algum erro, me avisa por favor 🙂


Para resolver um problema, é importante ler o enunciado com atenção, e se atentar no que o problema pede, e quais as restrições de entrada, e então ir pensando em possíveis soluções. É importante pensar na complexidade e eficiência do código antes de implementar, para não perder tanto tempo. Esse processo vai ficando mais natural conforme o passar dos tempos. Por isso é importante resolver vários exercícios para ganhar experiência.

Normalmente, os códigos implementados para as competições não são os mais bonitos, então não precisam ficar preocupados com isso nessa disciplina. Muitas vezes são deixadas de lado várias boas práticas de programação para que a codificação seja feita mais rapidamente, porém continua sendo importante deixar o código legível, para facilitar eventuais debugs.

Na maioria dos sites judges, pode-se utilizar várias linguagens de programação, mas as principais são C++, Java e Python (e, dentro dessas, C++ é a mais utilizada).


Materiais complementares

Existem vários materiais complementares disponíveis na internet, caso queira aprender algum tópico ou sanar algumas dúvidas de alguns algoritmos avançados. Vou tentar falar de alguns dos mais utilizados.

Sites

Para consulta das funções de C++, pode-se visitar os sites cplusplus e cppreference.

Para aprender, são bem famosos os sites geeksforgeeks e cp-algorithms. Também existem alguns tutoriais interessantes no hackerrank e hackerearth. Também existem vários outros disponíveis, só pesquisar no Google. O site do GEMA também possui materiais em português.

Para ver mais problemas e tentar solucionar, são famosos os sites codeforces, atcoder, cses.fi (com uma coletânea de problemas "clássicos"), topcoder, codechef, dentre outros.

Livros

Existem dois livros mais famosos para programação competitiva, que citam e explicam alguns algoritmos "avançados".

O primeiro é conhecido como "CP-3", que é a terceira edição do livro Competitive Programming, escrito por Steven Halim e Felix Halim.

O segundo talvez seja atualmente o mais utilizado: Competitive Programmer's Handbook, de Antti Laaksonen. Ele está disponível gratuitamente em: https://cses.fi/book/book.pdf.

Além destes, também existem vários livros caso você queira aprender e se familiarizar com C++.

Youtubers

Vou deixar aqui alguns canais que eu acho interessantes, e postam conteúdos relacionados à programação competitiva, como aulas, dicas e "screencasts" (gravação deles codando em algum contest).