Guia para iniciantes em programação competitiva
O que é o CEMCodes?
O CEMCodes é a equipe da UFSC-CTJ focada em programação competitiva. Pela definição da Wikipédia, programação competitiva é “… um esporte mental envolvendo participantes tentando programar de acordo com especificações dadas”. Para ser mais específico, focamos em competições, geralmente denominadas algorítmicas, onde o objetivo é resolver problemas de solução conhecida o mais rápido possível.
Para conseguir participar de competições com eficácia, é necessária habilidade em programação e conhecimento em algoritmos, estruturas de dados e matemática e, portanto, o foco principal do CEMCodes como equipe é capacitar os seus membros nesses tópicos, dentro do contexto de programação competitiva. Para realizar isso, o CEMCodes se reúne toda sexta-feira letiva, na sala U203 às 13h30.
O CEMCodes possui três trilhas de atuação para contemplar as atividades de extensão do projeto.
- Competição: as pessoas participantes devem treinar e se preparar para as competições de programação. Para contabilizar as horas de extensão no semestre, será necessário comprovar a participação em ao menos 8 competições online e uma presencial no semestre.
- Divulgação: as pessoas participantes irão construir material didático (vídeos ou material criativo sobre técnicas), participar de ao menos um evento de divulgação para escolas e ajudar na organização de competições.
- Desenvolvimento: as pessoas participantes irão contribuir no desenvolvimento de um jogo para tutoria na programação competitiva.
Para entrar nas trilhas 2 e 3, é necessário já possuir experiência em programação competitiva, a trilha 1 está, atualmente, aberta a qualquer estudante do campus.
O resto deste documento tem como objetivo introduzir as principais competições relevantes a nós e recomendar recursos úteis para iniciantes.
Maratona SBC de Programação e a International Collegiate Programming Contest (ICPC)
A principal competição a nível universitário no mundo é a ICPC. Para times brasileiros, ela consiste em 4 etapas, as 2 primeiras sendo parte da Maratona SBC de Programação. O formato da competição consiste de uma prova presencial de 5 horas, com 10-15 problemas, que deve ser feita em trios, os melhores trios baseados em número de problemas feitos, tempo usado para resolver os problemas e tentativas falhas de resolver problemas são classificados até a próxima etapa e/ou recebem premiações.
Online Judges
Há diversas plataformas online de programação competitiva que sediam competições e/ou providenciam um arquivo de problemas que podem ser resolvidos. Elas são essenciais para praticar para a ICPC, além de algumas serem interessantes como lugar de competição.
Principais recursos recomendados para iniciantes
Competitive Programmer’s Handbook
O CPHB é um ótimo livro que cobre tudo de mais importante na programação competitiva de forma didática e está disponível de forma gratuita tanto em inglês, quanto em português.
O autor do CPHB, também, construiu uma coleção de problemas de alta qualidade, separados por tópicos, que podem ser de grande ajuda na fixação dos conhecimentos do livro, a coleção pode ser encontrada aqui: https://cses.fi/problemset/.
AtCoder
O AtCoder é uma das principais plataformas de competição online e se destaca por sediar competições para iniciantes quase todo sábado de manhã, e recentemente, tem também sediado competições mais simples todo dia de semana de manhã.
Codeforces
O Codeforces é a principal plataforma de competição online, porém suas competições para iniciantes (Division 3 e Division 4) são mais raras. Além de competições, o Codeforces possui:
- Problemset: com milhares de problemas de competições antigas
- Gym: onde qualquer um pode publicar uma competição e o principal lugar onde competições presenciais são arquivadas, podendo ser usadas para prática
- Catalog: uma lista de blogs sobre diversos tópicos
Outros recursos interessantes
Algorithms for Competitive Programming
Coleção de artigos sobre vários assuntos de programação competitiva, https://cp-algorithms.com/.
USACO Guide
Um site com um curso estruturado que possuí conteúdo e problemas, de nível iniciante até avançado. Baseado na olimpíada de informática estadunidense. https://usaco.guide
clist.by
O clist.by é um site que reúne competições e problemas de quase todos os Online Judges.
