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.

  1. 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.
  2. 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.
  3. 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.