Caixa de Ferramentas I: Tipos, Números e Trabalho em Tempo de Compilação
por Frank de Alcantara em 30/09/2026
- 1. Contar Antes de Programar: Complexidade, Restrições e Medição
- 2. A Máquina por Baixo do Algoritmo: Tipos, Cache e Desvios
- 3. Treino T01: Contando Antes de Codificar
- 4. Caixa de Ferramentas I: Tipos, Números e Trabalho em Tempo de Compilação
- 5. Caixa de Ferramentas II: Vetores, Matrizes, Vistas e Algoritmos
- 6. Treino T02: Pagar Uma Vez, Perguntar Sempre
- 7. Entrada e Saída de Alto Desempenho
- 8. Treino T03: Alimentando a Máquina
- 9. Busca Binária: Comprar Informação pela Metade
- 10. Ordenar por Comparação: o Limite, a Biblioteca e a Seleção
- 11. Ordenar sem Comparar: Contagem, Radix e a Escolha da Ferramenta
- 12. Treino T04: Comprar Informação
- 13. Somas de Prefixo e Arrays de Diferenças: Integrar e Derivar em Tempo Constante
- 14. Janelas que Deslizam: Deque Monotônico, Dois Ponteiros, Kadane e Sparse Table
- 15. Bits como Conjuntos: Máscaras, popcount e Bitsets de Muitas Palavras
- 16. Hash de Prefixo, Seleção em Três Partes e o Algoritmo de Mo
- 17. Treino T05: Intervalos com Orçamento
- 18. Pilhas, Filas, Heaps e Contêineres Associativos: o Estado que Sobrevive à Pergunta Seguinte
Toda solução de competição tem duas vidas. A primeira é matemática: escolher a ideia certa, demonstrar o invariante, estimar a complexidade. A segunda é mecânica: digitar a ideia em C++23 depressa e limpo o bastante para que o compilador entenda o que o cérebro pretendia. Os três primeiros artigos da série trataram quase só da primeira vida. Este artigo, e o próximo, tratam da segunda.
A palavra que organiza os dois artigos é caixa de ferramentas, e ela pede um cuidado logo de saída. Caixa de ferramentas não é um cabeçalho cheio de macros copiado do blog de um finalista. Uma boa caixa de ferramentas reduz a digitação, evita defeitos e mantém o programa perto do problema. A máquina não recompensa cerimônia, e o juiz não se importa com quantos apelidos a participante decorou. Mas, quando uma solução de duzentas linhas precisa ser escrita sob pressão, nomes curtos, tipos certos, constantes com nome e algoritmos da biblioteca poupam minutos. Em uma competição, minutos são um recurso. Precisam ser gastos como memória.
Este artigo cobre a metade da caixa que trata de valores: como dar nomes a tipos, como a linguagem decide o tipo de um número escrito no código, como transferir trabalho da execução para a compilação, como escrever código genérico que rejeita chamadas erradas antes de o programa rodar, como escrever funções locais com lambdas e como evitar cópias sem perder a legibilidade. O Artigo 5 cobre a outra metade, a dos contêineres: vetores, matrizes, std::span, ranges e os algoritmos da biblioteca padrão.
Os programas deste artigo foram compilados e executados com o MSVC do Visual Studio 18.10.3, com /std:c++latest /O2 /W4 /permissive-, e todas as saídas mostradas a seguir vêm dessa execução. Onde o MSVC se comporta de forma diferente do GCC ou do Clang no Linux, o texto diz.
Este artigo completo contém estratégias práticas e dados exclusivos reservados para nossos membros cadastrados.
Continuar com Google Acesso gratuito e instantâneo com sua conta Google(Updated: )