Skip to Content

Introducción a la programación competitiva

Concursos de programación

Un concurso de programación  suele durar varias horas y consiste en un conjunto de problemas. Estos problemas no son problemas abiertos: ya fueron resueltos por quienes los escribieron y probaron, y están diseñados para resolverse en el tiempo corto de un contest. En general, cada problema de programación competitiva se resuelve con un proceso de dos pasos:

  1. idear el algoritmo, lo que involucra habilidad para resolver problemas e intuición
  2. implementar el algoritmo, lo que requiere habilidad de programación para traducir el algoritmo a código que funcione.

Para cada problema, enviás el código completo a un grader, que compara las respuestas calculadas por tu programa contra un conjunto de casos de prueba predeterminados. Para cada problema te dan un límite de tiempo (normalmente 2 segundos) y un límite de memoria (normalmente 256 megabytes ) que tu programa debe respetar.

Si tenés experiencia en desarrollo de software, tené en cuenta que la programación competitiva es bastante distinta: el objetivo es escribir programas que calculen la respuesta correcta, corran rápido y se puedan implementar rápido. Nótese que en ningún lado se menciona la mantenibilidad del código. No hace falta documentar el código porque solo tiene que ser legible para vos durante el contest. Dicho esto, conviene mantener un mínimo de legibilidad para no perder de vista qué está pasando.

Recursos
FuenteRecursoNotas
William LinVideo - What is Competitive Programming?

video mostrado arriba

Kamil DebowskiVideo - Interview with a Competitive Programmer
CPH1 - Introduction

algoritmos y concursos de programación

IUSACO1 - The Beginning

programación competitiva, contests

PAPS11 - Algorithms & Problems

ejemplos de algoritmos

Acá hay una tarea similar a la que se resolvió en el video de Kamil:

HechoFuenteNombreDificultadTagsSolución
KattisBasketball One on OneMuy fácil

Solución - Basketball One-on-One

Simplemente imprimí el anteúltimo carácter de la entrada.

#include <iostream> using namespace std; int main() { string s; cin >> s; cout << s[s.size() - 2]; }
print(input()[-2])
import java.util.Scanner; public class basketballoneonone { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.next(); System.out.println(s.charAt(s.length() - 2)); } }

USACO

La USA Computing Olympiad  es un concurso nacional de programación que ocurre cuatro veces al año, con contests en diciembre, enero, febrero y US Open (marzo). Los contests regulares duran cuatro horas, y el US Open dura cinco. Cada contest tiene tres problemas. Las soluciones se evalúan y puntúan contra un conjunto de casos de prueba predeterminados. El puntaje es sobre 1000 puntos, y cada problema pesa lo mismo (~333 puntos). Hay cuatro divisiones: Bronce, Plata, Oro y Platino. Después de cada contest, los estudiantes que alcancen el corte de promoción (que depende del contest) compiten en la siguiente división en los contests futuros.

Ver las USACO FAQ para más información.