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¶
- Formatação Consistente:
- Indentação uniforme
- Espaçamento lógico
-
Estilo de chaves consistente
-
Nomenclatura Significativa:
- Nomes de variáveis descritivos
-
Nomes de funções que indicam claramente seu propósito
-
Design Modular:
- Divisão de problemas em funções lógicas
- Componentes reutilizáveis
-
Separação entre I/O e lógica
-
Eficiência:
- Algoritmos ótimos
- Operações redundantes mínimas
-
Uso inteligente de features da linguagem
-
Legibilidade:
- Fluxo lógico
- Comentários claros onde necessários
- Evitar one-liners excessivamente complexos que prejudicam a clareza
Como Usar Essas Referências¶
- Estude as soluções deles para problemas que você já tentou
- Compare sua abordagem com a deles
- Observe como eles tratam casos extremos (edge cases)
- Analise seus padrões de organização
- 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]];