Por Ariel Parra & Cristian Donato
En teória solo existen dos tipos de errores, errores de lógicos y errores de código, pero para una mejor distinción elegimos estos tipos de errores:
Acceso Fuera de los Límites de un Arreglo:
int arr[5] = {1, 2, 3, 4, 5}; int out_of_bounds = arr[10]; // Error: acceso fuera de los límites
Variables No Inicializadas:
int x; // No inicializado int y = x + 10; // Error: uso de variable no inicializada
Fallo al Reiniciar Variables Globales:
int global_var = 0; void reset_global() { global_var = 0; // Reinicia la variable global entre casos }
Desbordamiento de la Pila con Recursión:
void recursive_function(int n) { if (n == 0) return; recursive_function(n - 1); // Puede causar desbordamiento de la pila si n es muy grande }
Múltiples Llamadas a una Función:
strlen()
.size()
string str = "example"; size_t len = str.size(); // Mejor declarar una variable que llamar a str.size() múltiples veces
Error al iterar en un vector:
n-1
0
for (int i = n; i >= 0; --i) cout << vec[i] << " ";// vec[n] no existe!, vec[n-1] si for (int i = 0; i < n ; ++i) cout << vec[i+1] << " ";// vec[i+1] sobrepasa el limite!, limita a n-1
Errores de Precisión con Números de Punto Flotante:
float a = 1.0000001f; float b = 1.0000002f; if (a == b) { // Error: los números de punto flotante pueden no ser exactamente iguales }
Problemas con la Aritmética Modular:
int a = -5 % 3; // Resultado puede ser inesperado
Uso de sqrt y Conversión a Entero:
sqrt
double
double x = 8.0; int y = sqrt(x); // Puede perder precisión al convertir a int
Overflow y Underflow de Enteros:
int a = INT_MAX; int b = a + 1; // Overflow: comportamiento indefinido
Underflow de Enteros Sin Signo:
unsigned int a = 0; unsigned int b = a - 1; // Underflow: resultado inesperado
Diferencias entre floor y trunc en Divisiones:
floor
trunc
floor(-4.5)
-5
trunc(-4.5)
-4
double a = -5.5; int result1 = floor(a / 2); // -3 int result2 = trunc(a / 2); // -2
Existencia de casos base:
void solve(int n) { if (n == 0) { /* manejar caso 0 */ } if (n == 1) { /* manejar caso 1 */ } if (n == INT_MAX) { /* manejar el caso máximo */ } }
Errores de Sintaxis:
int x = 10 // Error de sintaxis: falta el punto y coma
Sombreado de Variables (Variable Shadowing):
int x = 5; void func() { int x = 10; // Sombrea la variable global x }
Orden de Operaciones (Precedencia de Operadores):
int x = 2 + 3 * 4; // El resultado es 14, no 20
Errores en Comparadores Personalizados para Ordenamiento:
sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; });
En Caso de TLE, Checa que Todos los Ciclos Terminen:
while (true) { // Error: bucle infinito que puede causar TLE }
Si una DP Multicaso Da TLE, Intenta Precalcular Todo:
int dp[1000]; void precalculate() { for (int i = 0; i < 1000; ++i) { dp[i] = /* algún cálculo */; } }
Manejo Incompleto de la Entrada:
int x; while (cin >> x) { // Procesar x, pero podría quedar entrada sin procesar }
No Usar endl (a Menos que Quieras Hacer flush):
endl
flush
\n
cout << "Hello\n"; // Mejor que usar cout << "Hello" << endl;
Recordar Usar la Implementación de cout y cin Rápidos:
cout
cin
main
ios::sync_with_stdio(0); cin.tie(0);
No Mezclar cin/cout con scanf/printf:
scanf
printf
int x; scanf("%d", &x); cout << x; // Error: mezclar scanf con cout puede causar problemas
Lectura de Espacios:
getline
string str; getline(cin, str);
¿Alguna Variable Necesita Ser long long o unsigned long long?:
long long
unsigned long long
long long large_num = 1000000000000LL; unsigned long long huge_num = 1000000000000000ULL;
Si el Programa es Multicaso, Limpia las Variables:
int t; // Número de casos while (t--) { // Reinicia variables aquí global_var = 0; }
tu salida sigue el formato específico requerido.
cout << setfill('0') << setw(2) << hours << ":"<< setfill('0') << setw(2) << minutes ;
int n = 1000; // Verifica que el límite es correcto
¿El Problema Requiere de un Módulo en la Respuesta?:
int result = (a + b) % 1000000007; // Aplicar el módulo en la respuesta
Si una Función Debe Devolver un Valor, ¿Estás Devolviéndolo en Todos los Casos?:
int func(int x) { if (x > 0) return x; // Error: no se devuelve ningún valor si x <= 0 }
vector<int> graph[100]; bool visited[100] = {false}; void dfs(int node) { visited[node] = true; for (int neighbor : graph[node]) { if (!visited[neighbor]) { dfs(neighbor); } } } //
cout >>
Mencionar el pendejario.txt de Gustavo Meza, ex competidor de Aguascalientes