O guia definitivo para programação competitiva

Mar 22 2022
Olá leitores! Sou Chitra Singla, estudante do último ano de Engenharia de Software da Delhi Technological University. Recentemente, recebi ofertas em tempo integral do Google e da Amazon.

Olá leitores! Sou Chitra Singla, estudante do último ano de Engenharia de Software da Delhi Technological University. Recentemente, recebi ofertas em tempo integral do Google e da Amazon . Anteriormente, fiz um estágio de verão de 2 meses na Amazon e atualmente estou fazendo um estágio de inverno de 6 meses no Walmart .

A codificação competitiva ocupa um lugar especial no meu coração. Atualmente, sou classificado como especialista em Codeforces e codificador de 4 estrelas no Codechef . Com a prática constante e sendo consistente, consegui garantir uma classificação de Global Rank 369 no Google Code Jam I/O Women 2020 e uma classificação de Global Rank 1114 na Google Kickstart Round C 2020. Além disso, assegurei classificações globais de 97 , 462 na rodada CodeForces 713 e 642 (Div 3) e 140 , 220 nas rodadas de preparação de julho e fevereiro do CodeChef 2020 (Div 2), respectivamente .

Isenção de responsabilidade: Deve-se notar que tudo mencionado aqui é minha opinião pessoal, portanto, há grandes chances de diferenças de opinião em alguns lugares.

Através deste blog, estarei abordando algumas dúvidas relacionadas ao CP sobre as quais as pessoas geralmente estão em dilema. Para torná-lo divertido, é em formato de questionário. Leitura feliz!

Índice:

[1] O que é CP?

[2] Quem deve fazer CP?

[3] O CP é necessário para a colocação de rachaduras?

[4] De qual plataforma se deve começar?

[5] Qual é o momento ideal para colocar as mãos em CP?

[6] Quais são os pré-requisitos?

[7] Qual é a abordagem ideal para resolver questões?

[8] Importância dos concursos.

[9] Como lidar com a situação quando você não consegue resolver as questões?

[10] Conselho final para programadores iniciantes

[1] O que é CP?

A programação competitiva é como um esporte de programação que envolve muitos participantes competindo entre si para alcançar melhores resultados. Um programador competitivo implementa seu algoritmo e o submete a um sistema de concurso. Em seguida, o algoritmo é testado usando um conjunto de casos de teste e, se passar em todos eles, é aceito.

Créditos da imagem: serhuman.ai

A programação competitiva provou ser uma excelente maneira de aprender algoritmos, pois incentiva a projetar algoritmos que realmente funcionem, em vez de esboçar ideias que podem funcionar ou não. Envolve o projeto e implementação de algoritmos de forma eficiente.

Muitas plataformas e empresas online hospedam concursos de programação. por exemplo: Hashcode, Kickstart, CodeJam do Google e HackerCup do Facebook. Um dos concursos de programação competitivos mais famosos é o ICPC (International Collegiate Programming Contest). Os programadores podem participar desses concursos, verificar sua compreensão, mostrar suas habilidades e ter a chance de ganhar brindes e prêmios emocionantes por meio desses concursos.

[2] Quem deve fazer CP?

Todos deveriam pelo menos tentar fazer CP uma vez. Ajuda a melhorar a mente e desenvolver habilidades analíticas e de pensamento. Melhora as habilidades de resolução de problemas e programação e ajuda na preparação para entrevistas técnicas. Resolver problemas de programação competitivos também melhora as habilidades de programação e depuração.

Quando você treina e participa de competições de programação, você se torna mais disciplinado, mais rápido e mais eficiente. Nesse ambiente, você resolve problemas e codifica com um prazo apertado. Isso ensina você a se concentrar em uma tarefa e executá-la com eficiência.

[3] O CP é necessário para a colocação de rachaduras?

Não, a programação competitiva não é de todo necessária para as colocações de crack, mas sim, é altamente recomendada, pois melhora as habilidades de resolução de problemas. Ajuda a melhorar a capacidade mental e lógica , pois os problemas do concurso exigem raciocínio, o que, por sua vez, ajuda a resolver questões complicadas facilmente. Também torna a pessoa mais rápida e mais focada.

Por outro lado; em Desenvolvimento Web, aprendemos pilhas de tecnologia que mudam com muita frequência, então prefiro gastar mais tempo aprimorando habilidades de resolução de problemas do que desenvolvendo web. As habilidades de resolução de problemas são o núcleo de todos os domínios de tecnologia.

Créditos da imagem: geeksforgeeks.org

-> Como iniciar o CP?

Agora surge a pergunta, como começar com programação competitiva. Comece aprendendo o básico de uma linguagem de programação (pode ser qualquer uma de C++ ou Java, essas 2 são as recomendadas). Depois de aprender o básico, comece a praticar os problemas. Para isso, você pode começar com o HackerRank , pois é a plataforma mais amigável para iniciantes e ajuda a desenvolver facilmente habilidades fundamentais de resolução de problemas.

Depois de se familiarizar com os problemas básicos , você pode começar a praticar perguntas no Codeforces . É uma das melhores plataformas para programação competitiva. Aos poucos comece a participar de concursos e a cada 3/4 horas de resolução de problemas, reserve pelo menos 1 hora para aprender e revisar os conceitos.

Aprenda estruturas de dados e algoritmos , comece com análise de complexidade de tempo e espaço, seguido de aprendizado de estruturas de dados como Arrays, Listas vinculadas, Pilhas, Filas, Árvores, Heaps, Gráficos, Tentativas, juntamente com os algoritmos como Pesquisa, Classificação, Ganância, Dividir e Conquistar e Programação Dinâmica.

Pratique, pratique e pratique como prática é a única maneira de melhorar na programação competitiva.

[4] De qual plataforma se deve começar?

Codeforces é a melhor plataforma para programação competitiva de acordo com mim. Organiza concursos curtos com muita frequência, e o nível e a qualidade das perguntas também são muito bons.

Eles também têm uma característica de participar de um concurso virtualmente o que significa que se você perder o concurso ao vivo você ainda pode dar o concurso virtualmente, a única diferença é que no caso de participação virtual não haverá alteração na classificação.

Codeforces introduziu recentemente 2 novas seções, Catálogo e EDU. Na seção de catálogo, estão presentes blogs de tópicos relacionados ao CP, escritos pelos principais codificadores. E na seção EDU, está presente um curso que contém problemas teóricos e práticos relacionados a alguns tópicos importantes para programação competitiva.

Além do Codeforces, existem muitas outras plataformas, como CodeChef, Topcoder, AtCoder e muito mais.

[5] Qual é o momento ideal para colocar as mãos em CP?

Qualquer um pode começar a qualquer momento, não existe um momento ideal porque depende da motivação para fazê-lo. Algumas pessoas passam de 3 a 4 anos e ainda não conseguem melhorar, enquanto outras atingem grandes níveis em apenas 3 a 4 meses, então tudo varia de pessoa para pessoa. Minha recomendação seria começar o mais cedo possível.

[6] Quais são os pré-requisitos?

Não há pré-requisitos como tal. Você pode aprender o básico de qualquer linguagem de programação como sintaxe, alguns DSA básicos como Arrays, Strings e algoritmos como Sorting e Math. Depois disso, você pode começar a resolver as questões e aprender novos conceitos enquanto resolve as questões.

[7] Qual é a abordagem ideal para resolver questões?

Leia a pergunta com atenção , tente anotar todos os pontos dados na pergunta, nenhuma informação está desnecessariamente presente lá. Depois disso, tente identificar a complexidade de tempo esperada do algoritmo analisando as restrições dadas na entrada. Em seguida, tente formar a abordagem e otimizá-la o máximo possível usando estruturas de dados e algoritmos adequados.

Se você não conseguir descobrir o algoritmo, tente seguir dicas de amigos ou leia as 1-2 linhas iniciais do editorial e pense em toda a abordagem por conta própria. Se você ainda não for capaz de formar a abordagem, leia o editorial e implemente-o você mesmo. Novamente, se você enfrentar algum problema, veja a solução e analise por que você não conseguiu resolvê-lo e anote as novas coisas aprendidas.

Se você encontrar um novo método de resolver a questão ou encontrar algo novo, como um truque, anote isso. Alguns exemplos de truques que podem ser úteis às vezes:

  • Usando chamada por referência no caso de vetores e strings em vez de chamar por valor
  • Usando map em vez de unordered_map como a complexidade de tempo do pior caso de unordered_map é linear

[8] Importância dos concursos.

Os concursos desempenham um papel crucial na melhoria das habilidades de resolução de problemas. Contest prepara você para resolver questões em um ambiente cronometrado , eles ajudam a sentir a pressão de resolver novas questões em um determinado limite de tempo. Muitas empresas têm suas rodadas de teste de codificação on -line, portanto, participar de concursos ajudará você a ter um melhor desempenho lá.

Tente dar todo e qualquer concurso ao vivo e se por algum motivo você não puder dar um concurso ao vivo, participe de um concurso virtual . Muitas plataformas online permitem que você participe de um concurso virtualmente. Não se sinta desmotivado se suas classificações caírem após o concurso. A resolução após o concurso é muito importante. Tente resolver pelo menos mais uma questão.

Vamos supor que você tenha conseguido resolver 2 questões durante o concurso, então tente resolver a 3ª também após o concurso e analise o motivo pelo qual você não conseguiu resolver a questão durante o concurso.

[9] Como lidar com a situação quando você não consegue resolver as questões?

Haverá muitas vezes em que você não será capaz de resolver a questão. Pode haver 2 razões para isso: Uma pode ser que a questão será resolvida por um algoritmo ou estrutura de dados que você não conhece ou é um tipo de questão completamente novo. Então, neste caso, identifique isso e aprenda e depois tente resolver a questão. O segundo caso pode ser que você esteja familiarizado com o tópico da questão, mas ainda assim não consegue pensar na abordagem. Nesse caso, tente dividir a questão em tarefas menores se possível e depois tente resolver, pegar dicas e discutir com os colegas. Se nada disso funcionar, veja o editorial e tente analisar por que você não conseguiu pensar nisso.

[10] Conselho final para programadores iniciantes

Participe do maior número de concursos que puder. Muitas vezes vejo alunos passando meses na teoria do PC e nunca participando de uma competição (online ou presencial) temendo não saber o suficiente para começar a competir ou temendo a pressão de uma competição cronometrada. Escrever código preciso e rápido é uma grande parte do CP e isso só pode ser melhorado participando de um concurso ao vivo. Além disso, fique perto de pessoas que gostam de CP. Estar cercado por essas pessoas irá mantê-lo motivado.

Já que você chegou ao fim , aqui está uma lista de recursos que usei na minha jornada CP

-> Sites para praticar

  • Forças de código:https://codeforces.com/
  • Codechef:https://www.codechef.com/
  • Topcoder:https://www.topcoder.com/
  • AtCoder:https://atcoder.jp/
  • CLRS: Clique aqui
  • Programação competitiva: Steven Halim: Clique aqui
  • Manual do programador competitivo: Clique aqui
  • O Guia do Mochileiro para os Concursos de Programação: Clique aqui
  • Algoritmos de PC:https://cp-algorithms.com/
  • takeUforward:https://www.youtube.com/c/takeUforward
  • Concurso AtCoder DP:https://atcoder.jp/contests/dp
  • Lista de reprodução Aditya Verma DP: (https://www.youtube.com/playlist?list=PL_z_8CaSLPWekqhdCPmFohncHwz8TY2Go)

Codess.Cafe: LinkedIn | YouTube | Site | Médio | Twitter