EM PRIMEIRO LUGAR, CALMA!
Em primeiro lugar, não se desespere caso você ainda não saiba programar ou não
tenha experiência alguma com programação competitiva.
Neste guia, vamos lhe oferecer muitas dicas para que você possa se preparar com mais segurança para a prova e consiga ganhar seus merecidos balões!
Aqui, falaremos das principais plataformas utilizadas para estudar para as competições de programação e te ensinaremos a navegar por cada um dos sites recomendados.
Além disso, forneceremos dicas de estudos e links úteis para que você possa se familiarizar com programação competitiva.
Estamos à disposição para qualquer dúvida no nosso Instagram e no nosso e-mail.
O Neps Academy é uma plataforma online de cursos e treinamento em programação.
Nós recomendamos fortemente este site para aquelas pessoas que nunca programaram ou
que são novas neste universo de programação competitiva. A plataforma oferece cursos
preparados por professores com experiência e reconhecimento internacional, além de
uma vasta quantidade de exercícios para que você possa colocar em prática aquilo que
aprendeu.
CURSOS
No menu principal do site, clique em “Cursos de Programação” na seção “Aprenda”
Dentre as opções de cursos que a plataforma oferece, selecione “Expert em Algoritmos”
O único curso gratuito oferecido no setor “Expert em Algoritmos” é o primeiro
(“Introdução à Programação”). Tal curso oferece uma noção clara sobre conceitos básicos
de programação de computadores. Além disso, neste curso você aprenderá o que é um
algoritmo e como implementá-lo do zero.
No menu principal do site, clique em “Exercícios” na seção “Pratique” Os exercícios são
separados por categoria e vários deles contam com tutoriais que te ajudarão na solução
do problema, caso você não saiba por onde começar ou não saiba o motivo do seu código
estar errado.
O Codeforces é um dos principais sites utilizados para treinar para competições de programação. A plataforma oferece tanto concursos competitivos de programação quanto uma vasta quantidade de exercícios. O site é mantido por um grupo de programadores competitivos da Universidade ITMO, liderado por Mikhail Mirzayanov, e é usado pelos principais programadores esportivos do mundo inteiro.
Os contests são provas online que seguem os modelos das principais competições de programação (principalmente aquelas elaboradas pela ICPC). A plataforma organiza os contests por nível: temos os níveis Div 1, Div 2, Div 3 e Div 4, onde Div 4 é o nível mais fácil e Div 1 é o nível mais difícil. Participar dos contests ao vivo é uma ótima forma de treinar para a Maratona de Programação. No site, para acessar o calendário dos próximos concursos, clique em “Contests” e, depois, em “Register” para fazer a sua inscrição naquela prova (caso a opção “Register” já
esteja disponível).
Na seção “Problemset”, você encontrará uma enorme variedade de exercícios para colocar em prática seus conhecimentos de programação competitiva. Os exercícios são classificados por nível de dificuldade (onde exercícios de nível 800 são os mais fáceis e aqueles de nível 3500 são os mais difíceis) e por assunto. Para filtrar os problemas por nível de dificuldade, declare os limites inferior e superior de dificuldade que você deseja praticar e clique em “Apply” na área “Filter Problems”.
Para ordenar os problemas do mais fácil ao mais difícil,clique no ícone “Difficulty” (representado por um raio laranja) duas vezes seguidas. Para filtrar os problemas por assunto, clique em “Add tag” na área “Filter Problems” e selecione os assuntos que você deseja praticar. Caso você queira praticar exercícios de assuntos variados, não esqueça de selecionar a opção “*combine tags by OR”. Caso essa opção não seja selecionada, o algoritmo irá procurar apenas por exercícios que contenham todos os assuntos selecionados simultaneamente.
Todas as pessoas que possuem conta no Codeforces podem escrever artigos em seus perfis. Alguns competidores mais experientes escrevem artigos que variam desde assuntos complexos de programação competitiva até dicas de estudo. Para encontrar um post no Codeforces sobre o assunto em que você deseja se aprofundar, digite na aba de pesquisa do seu navegador padrão: “Codeforces blog about (assunto desejado)”.
Além disso, você pode simplesmente entrar no perfil de algum usuário da plataforma e clicar em “Blog”, para acessar todos os artigos que essa pessoa já escreveu.
SOBRE O LIVRO
É um livro, que possui versão acessível em pdf, conta com uma vasta quantidade de assuntos
de programação competitiva, desde tópicos mais básicos até assuntos bem complexos. O
material foi originalmente escrito em inglês, mas você pode encontrar versões traduzidas
para português na internet!
Recomendamos fortemente que você experimente estudar pelo CSES, já que a
explicação dos algoritmos é bastante clara e objetiva.
PROBLEMSET
Trata-se de uma coleção de 300 problemas de programação, os quais foram elaborados de
tal forma que você possa aprender de forma clara os algoritmos ensinados ao longo do
livro.
SOBRE O LIVRO
É um livro, que possui versão acessível em pdf, conta com uma vasta quantidade de assuntos
de programação competitiva, desde tópicos mais básicos até assuntos bem complexos. O
material foi originalmente escrito em inglês, mas você pode encontrar versões traduzidas
para português na internet!
Recomendamos fortemente que você experimente estudar pelo CSES, já que a
explicação dos algoritmos é bastante clara e objetiva.
PROBLEMSET
Trata-se de uma coleção de 300 problemas de programação, os quais foram elaborados de
tal forma que você possa aprender de forma clara os algoritmos ensinados ao longo do
livro.
Aqui, separamos uma lista com os principais tópicos abordados em programação competitiva, para que você possa ter um norte de como estudar para a Maratona.
Os tópicos estão em ordem de dificuldade (dos mais fáceis até os mais difíceis) e optamos por deixar a maior parte desta lista em inglês, já que a grande maioria dos materiais que vocês encontrarão sobre programação competitiva estarão escritos em tal linguagem.
Então, vamos para a lista de tópicos de programação competitiva!
○ Time & Space Complexity Analysis
○ Divide & Conquer
○ Arrays
○ Linked List
○ Stack
○ Queue
○ Searching and Sorting
○ Hashing
○ 2 pointers
○ Backtracking
○ Fundamentals (Binary Exponentiation, Euclidean Algorithm, etc)
○Algorithms related to prime numbers (Sieve of Eratosthenes, etc)
○ Number Theory (Euler's totient, etc)
○ Modular Arithmetic (Modulo inverse, Chinese remainder theorem, etc)
○ Number Systems (Balanced Ternary, Gray code, etc)○ Linear Algebra
○ Geometry
○ Combinatorics
○ Numerical Methods
○ Misc (Fast Fourier transform, Polynomials, etc)
○ String Manipulation
○ Bit Manipulation
○ Greedy
○ Trees
○ Set
○ Map
○ Heap
○ Recursion
○ Dynamic Programming (DP)
○ Depth-first search
○ Breadth-first search
○ Minimum Spanning Tree
○ Bellman–Ford algorithm
○ Dijkstra’s algorithm
○ Floyd–Warshall algorithm
○ Game Theory
○ Advanced String Algorithms, Tries
○ Segment Trees, Fenwick Trees
○ Suffix Tree, Suffix Array
○ Heavy Light Decomposition
○ Disjoint Set, Graph Coloring, Network Flow
○ Sqrt Decomposition
C++
Trata-se de uma das linguagens de programação mais recomendadas e amplamenteutilizadas para Programação Competitiva. C++ é relativamente mais rápida em comparação com várias outras linguagens de renome.
Por conta desse fator, já que o tempo de execução desempenha um papel crucial na Programação Competitiva, C++ normalmente é a linguagem preferida das pessoas que participam das competições ativamente. A linguagem de propósito geral consiste em uma rica biblioteca chamada Standard Template Library.
A Biblioteca de Modelos Padrão inclui classes de modelos C++, as quais oferecem
várias estruturas de dados, como listas, árvores, pilhas, arrays, etc.
JAVA
Assim como C++, trata-se de uma linguagem orientada a objetos. O código Java compilado pode ser executado em qualquer plataforma que suporte Java, sem a recompilação.
JAVA possui um rico conjunto de bibliotecas, como a classe BigInteger (usada para cálculos baseados em números inteiros grandes) ou Expressões regulares (biblioteca de geometria para lidar com problemas geométricos e muito mais).
Além disso, vários outros recursos interessantes suportados por JAVA, como melhor
tratamento de exceções, Java Containers, etc. tornam-na uma das linguagens preferidas
para Programação Competitiva.
PYTHON
Python é uma linguagem de programação de alto nível e muito fácil de implementar, já
que possui uma sintaxe muito simples. Além disso, a linguagem tem uma extensa
biblioteca e suporte a funções que aumentam a eficiência dos programadores em
competições de codificação.
Outros recursos interessantes da linguagem são: nenhum limite para o valor inteiro,
as funções podem retornar mais de um valor, recuo de código, instruções de entrada
robustas, número flexível de argumentos para uma função, etc. Tais fatores tornam
Python uma linguagem adequada para Programação Competitiva.
Uma das únicas desvantagens do Python é o tempo de execução do código. Em
comparação com C++, por exemplo, Python apresenta-se como uma linguagem mais
lenta. Isso é um fator que normalmente leva competidores a não optarem pelo Python no
que tange à programação competitiva.
O curso de programação da MFP é composto por aulas gravadas, materiais de leitura e lista de exercícios, para que você possa estudar diversos assuntos de programação competitiva. Além disso, contamos com uma equipe de monitoria no Discord!
Caso você tenha alguma dúvida sobre teoria ou prática de algum assunto que foi dado no curso, use e abuse deste recurso para sanar sua dúvida :)
Por fim, separamos aqui algumas dicas que consideramos úteis pensando no momento da resolução da prova.
● Caso você não esteja conseguindo resolver um exercício específico da prova há muito tempo, tente passar para outro exercício. Evite perder muito tempo em apenas uma questão da prova.
● Tente ler todos os enunciados da prova o quanto antes. Desta forma, será mais fácilescolher quais questões você resolverá primeiro e quais você deixará por último.
● Use um rascunho para anotar as suas ideias para a resolução das questões! Sempre é bom fazer anotações para esclarecer melhor as suas ideias.
● Preste atenção nos detalhes dos enunciados! Muitas vezes deixamos passar informações importantes e não consideramos elas no nosso código.
● Aproveite ao máximo esta oportunidade única de conhecer pessoas de todo o país e de colocar em prática as suas habilidades de programação competitiva!
Esperamos que este guia tenha ajudado na sua preparação para a Maratona Feminina de Programação! Estamos à disposição para eventuais dúvidas.