Skip to content

Referências Recomendadas para Código Limpo e Boas Práticas

1. Neal Wu (AtCoder/Codeforces)

  • Perfil no AtCoder: Submissões do neal
  • Perfil no Codeforces: Submissões do neal
  • Qualidades Notáveis:
  • Estilo extremamente limpo e consistente
  • Abordagem modular para resolver problemas
  • Uso excelente de funções auxiliares
  • Padrões de implementação otimizados
  • Boa documentação no código quando necessário

2. Shayan (Codeforces)

  • Perfil: Submissões do Shayan
  • Pontos Fortes:
  • Implementação bem estruturada
  • Nomes de variáveis claros
  • Uso eficiente da biblioteca padrão
  • Boa decomposição de problemas

Observações Chave para Código Limpo

  1. Formatação Consistente:
  2. Indentação uniforme
  3. Espaçamento lógico
  4. Estilo de chaves consistente

  5. Nomenclatura Significativa:

  6. Nomes de variáveis descritivos
  7. Nomes de funções que indicam claramente seu propósito

  8. Design Modular:

  9. Divisão de problemas em funções lógicas
  10. Componentes reutilizáveis
  11. Separação entre I/O e lógica

  12. Eficiência:

  13. Algoritmos ótimos
  14. Operações redundantes mínimas
  15. Uso inteligente de features da linguagem

  16. Legibilidade:

  17. Fluxo lógico
  18. Comentários claros onde necessários
  19. Evitar one-liners excessivamente complexos que prejudicam a clareza

Como Usar Essas Referências

  1. Estude as soluções deles para problemas que você já tentou
  2. Compare sua abordagem com a deles
  3. Observe como eles tratam casos extremos (edge cases)
  4. Analise seus padrões de organização
  5. Adapte as melhores práticas ao seu próprio estilo

Lembre-se: O objetivo não é copiar diretamente, mas entender e incorporar os princípios que tornam o código deles eficaz.

Nomenclaturas communs para certos tópicos

Exemplos de Códigos

Set Add Query.cpp
    int N, Q;
    cin >> N >> Q;
    vector<bool> contains(N, false);
    vector<int64_t> answers(N, 0);
    vector<int64_t> size_prefix_sum(Q + 1, 0);
    vector<int> last_added(N, -1);
    int size = 0;

    for (int i = 0; i < Q; i++) {
        int x;
        cin >> x;
        x--;

        if (!contains[x]) {
            contains[x] = true;
            size++;
            last_added[x] = i;
        } else {
            contains[x] = false;
            size--;
            answers[x] += size_prefix_sum[i] - size_prefix_sum[last_added[x]];
        }

        size_prefix_sum[i + 1] = size_prefix_sum[i] + size;
    }

    for (int x = 0; x < N; x++)
        if (contains[x])
            answers[x] += size_prefix_sum[Q] - size_prefix_sum[last_added[x]];