Cómo prepararse justo antes de un concurso de programación (programación competitiva)
Dentro de la comunidad de programación competitiva existen varias guías acerca de como mejorar y prepararse resolviendo problemas. Esta pequeña guía pretende hacer algo distinto, una lista de comprobación de cosas que hacer antes y durante una competencia de programación.
Antes del contest
- No tener hambre ni sed
- No tener ganas de ir al baño
- Tener agua u otro bebestible a mano
- Tener snacks a mano por si me de hambre
- Entrar a Codeforces (o el sitio donde se aloje la competencia) e iniciar sesión.
- Abrir un archivo de texto para cada problema con la plantilla a usar para la competencia
- Abrir emulador de terminal en el directorio asignado para la competencia
- Abrir esta lista de comprobación
Al resolver un problema
- Leer el enunciado cuidadosamente
- Determinar exactamente qué es lo que tiene que hacer el programa (matemáticamente si es posible)
- Comprobar límites de la entrada, de tiempo y de memoria
Encontrar la solución
- Buscar patrones (programación dinámica, búsqueda binaria, grafos, etc)
- Reducir a casos sencillos
Implementar la solución
- Escribir grandes pasos
- Escribir el código
- Probar con los casos de ejemplo
- Probar con pequeños casos borde
Si da Wrong Answer
- Probar con distintos casos de prueba en los que conozcamos la salida esperada. Si son grandes, generar los casos con números aleatorios y comparar nuestro programa con una solución de búsqueda exhaustiva
- Inspeccionar el código en busca de errores
- Intentar demostrar la solución
- Cambiar los ints por long longs por si hay un overflow escondido.
- Si todo lo anterior falla, implementar la solución de una forma diferente
- Si aún así nada funciona, cambiar de problema.
Si da TLE/MLE
- Reducir constantes
- Hacer pequeñas optimizaciones (arrays en vez de vectores, uso de variables globales, etc)
- Si aún así nada funciona, cambiar de problema.
Si da RE
- Fijarse en los subíndices de los arrays y vectores
- Evitar divisiones por 0
- Si todo lo anterior falla, implementar la solución de una forma diferente