Saltar al contenido

Una plantilla de C++ para competencia

Comité ICPC Bolivia

En competencia, el tiempo que pasas escribiendo código repetitivo es tiempo que no pasas pensando. Una plantilla acordada de antemano ahorra varios minutos por problema.

La plantilla mínima

#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t = 1;
    // cin >> t;   // descomenta si el problema trae múltiples casos
    while (t--) {
        // solución
    }
    return 0;
}

Eso es todo lo que la mayoría de problemas necesita. Resiste la tentación de arrastrar doscientas líneas de macros: una plantilla que no entiendes completa es una fuente de errores, no una ventaja.

Por qué esas dos líneas de main

ios::sync_with_stdio(false) desactiva la sincronización entre los flujos de C++ y los de C. cin.tie(nullptr) evita que cin fuerce un vaciado de cout antes de cada lectura.

Juntas convierten cin/cout en algo comparable a scanf/printf en velocidad. En un problema con cientos de miles de líneas de entrada, la diferencia decide entre aceptado y time limit exceeded.

Desbordamiento: el error más caro

El error más frecuente en competencia no es algorítmico, es de tipos. int en la práctica llega hasta unos 2 × 10⁹; una suma de 10⁵ elementos de tamaño 10⁵ ya se sale.

El alias using ll = long long; está en la plantilla precisamente para que usarlo cueste dos caracteres. Cuando dudes, usa ll: el costo en memoria es irrelevante comparado con una penalización.

El cuaderno de equipo

Todo lo que tarde más de diez minutos en escribirse de memoria debería estar impreso en el cuaderno del equipo: estructuras de datos, algoritmos de grafos, aritmética modular, geometría básica.

El reglamento 2026 permite material impreso en la cantidad que determine la sede. Confirma el límite local antes de competir y prepara el cuaderno como parte del entrenamiento, no como un trámite de última hora.

Más material en recursos y en las guías de CP-Algorithms.