Como Começar na Programação Competitiva - IMPORTANTE PARA ESTUDANTES
A programação competitiva é uma das áreas que considero mais interessantes quando se trata de teoria da computação. Irei explicar o básico que você precisa para se informar, ou começar a estudar sobre. Um aviso importante é que a programação competitiva só existe de forma mais ativa no ensino básico e superior, enquanto o participante ainda é um estudante. Essa publicação está dividida em 4 seções:
- O que é Programação Competitiva
- Benefícios e Desvantagens
- Como Começar na Área
- Experiência Pessoal
O que é Programação Competitiva
Programação Competitiva, também conhecida como CP (sigla de Competitive Programming), é uma área da programação que foca em grande parte em teorias e algoritimos. Uma definição que gosto bastante é a da UFPR:
A programação competitiva é um esporte mental (como por exemplo, o xadrez) onde os participantes precisam criar um programa de acordo com uma especificação, isto é, um programa que resolve um problema computacional.
Esse conceito trás alguns pontos interessantes, como o fato de CP ser um esporte que ultiliza das faculdades mentais, e assim como outras competições (como as de Matemática) existe um conjunto de problemas que devem ser resolvidos usando programação. Um exemplo tirado da primeira fase da Olímpiada Brasileira de Informática (OBI) de 2017 no nível júnior é:
Em um bondinho cabem 50 pessoas. Dado um número A de alunos e M de monitores imprima 'S' caso todos possam ir em uma só viajem ou 'N', se não.
A primeira linha contém o inteiro A, e a segunda contém o inteiro M.
A solução desse problema é extremamente simples, e de forma colocada em pseudo-código temos:
valor a;
valor m;
receba a, m;
se (a + m > 50) {
imprima('N');
} se nao {
imprima('S');
}
Fácil, né? Bem, esse provavelmente é o exercício mais fácil que já apareceu na OBI do nível júnior. O maior desafio nos problemas não é resolver eles, isso na maioria das vezes é fácil dado tempo suficiente, o maior dos desafios é o tempo de execução. Em todo problema existe um tempo limite que o código pode rodar até entregar a solução, e caso não imprima nesse tempo aquele caso de teste é desclassificado, assim você pode receber uma pontuação parcial pelos casos que o programa conseguiu rodar. Para conseguir um tempo de execução aceitável é necessário aprender algoritimos, que podem ser fáceis como o Algoritimo Guloso ou complicados como o Algoritimo de Dijkstra, ou teorias tratando sobre árvores. Além de tempo existe o limite de memória, mas que dificilmente afeta qualquer solução.
Benefícios e Desvantagens
Vantagens | Desvantagens |
---|---|
Medalhas -> Vagas Olímpicas e Faculdades no Exterior | Geralmente para estudantes |
Últil para resolver problemas em entrevistas de emprego | Raramente (ou nunca) útil em empregos |
Viagens ao redor do Brasil e do Mundo | |
Conexões com pessoas da área | |
Bom para o currículo |
Como Começar na Área
A linguagem de programação mais usada em CP é o C++, primariamente por ser muito rápida. Para começar recomendo um curso do Neps Academy. Se você tem grana para investir, compre a assinatura PRO e assista o curso Expert em Algoritimos, caso contrário assita o curso gratuito CodCad. Eles irão te dar uma base completa, e caso acabe o Expert em Algoritimos, você é com certeza um dos melhores competidores no país. Enquanto estuda por esses cursos faça exercícios em sites como LeetCode, CodeForces, BeeCrowd, Neps, CodeWars, etc. Todos esses farão você crescer exponencialmente.
Agora, quando se falam de competições, existem dois caminhos:
Competições Nacionais (e Internacionais)
As duas competições nacionais existentes (se você é homem) são a Olímpiada Brasileira de Informática (OBI) e a Maratona de Programação. A primeira é para estudantes do ensino básico (e alunos do primeiro do E.S.), e a segunda é para alunos do Ensino Superior. Você pode ver os exercícios passados delas no Neps. A OBI tem uma vantagem especial, que é a possibilidade de ir para a Olímpiada Internacional de Informática (IOI) e para a Competição Ibero-Americana de Informática e Computação (CIIC), qualquer uma delas é de imenso valor para seu currículo, e vão lhe ajudar a entrar em uma faculdade tanto no Brasil, por meio das vagas olímpicas (na UNICAMP por exemplo), quanto no exterior, já que mostra seu comprometimento com essa "extra-curricular".
Para se qualifica você precisa estar fazendo o Nível 2 da OBI, e seguir por esse caminho:
Ouro ou prata na OBI -> Semana Olímpica -> 10 primeiros lugares vão para CIIC e 4 primeiros para a IOI
Para se inscrever é só falar com o coordenador da sua escola, e caso ele seja muito irritante e não queira lhe inscrever existe a possibilidade de ir para a olímpiada por meio do Neps (olhe mais no Discord deles).
Competições Online
Existem várias competições online, com as mais famosas sendo as do Google, com o Google Kickstart e a do CodeForces. Ambas são para todas as idades e (especialmente a do Google) tem muitos prêmios. Recomendo muito se inscreverem.
Experiência Pessoal
Eu começei na Programação Competitiva ano passado, e ganhei o lugar 55 nacionalmente no nível 1 (estava no sétimo ano do fundalmental), esse ano voltei um nível e ganhei ouro no júnior; assim vou para a Semana Olímpica ter um curso de uma semana na UNICAMP. Minha expectativa para o próximo ano é ganhar ouro no nível 2 e tentar me classificar para a IOI.
Fim
Essa foi minha segunda publicação na TabNews, se quiserem ver a primeira esse é o link. Obrigado por lerem até aqui!