Recursos para Programación Competitiva
Esta guía está enfocada a estudiantes de secundaria que quieran aprender a programar para competencias de programación competitiva.
En esta guía se asume que el estudiante tiene conocimientos básicos de programación en algún lenguaje de programación.
Sobre todo está dirigida a participantes de la Olimpiada Boliviana de Informática (OBI).
Tabla de contenidos
- Lenguajes de programación
- Tutoriales de C++ para programación competitiva
- Otras guías y recursos
- Para aprender algoritmos y estructuras de datos
- Libros
- Jueces Online
- Listas de problemas y Roadmaps
- Implementaciones de algoritmos y estructuras de datos
- Recursos en video
- Contribuciones
Lenguajes de programación
Inicialmente es importante entender que es mucho mejor programar en C++ que en otros lenguajes de programación, ya que otros pueden resultar más lentos o complejos al momento de competir y en competencias de programación competitiva el tiempo es muy importante.
Sobre todo, si uno aspira a competir en IOI, donde C++ es el único lenguaje permitido.
Tutoriales de C++ para programación competitiva
Un buen lugar con tutoriales y ejercicios para aprender C++ es Hackerearth CodeMonk, altamente recomendable debido a lo organizado que esta y la facilidad de aprender con sus tutoriales.
En OmegaUp también hay distintos cursos que pueden ser de utilidad, la ventaja de estos es que son en español.
Si bien estos enseñan desde lo más básico, no enseñan todo lo necesario para competir en la IOI, por lo que es necesario aprender más sobre C++.
Para este proposito es mejor aprender usando la USACO guide, la cual yo personalmente considero ser la mejor guía para aprender programación competitiva, cuenta con tutoriales de todos los temas necesarios para competir en la IOI, además de contar con una lista de problemas recomendados para cada tema.
Es indispensable utilizar USACO para ser un buen competidor.
También, más adelante se menciona que en AIZU OJ hay un curso que contiene problemas, mas no tiene tutoriales.
Otras guías y recursos
W3 Schools - Una página con tutoriales y ejemplos de todo lo relacionado a las estructuras de C++.
SoloLearn - Cuenta con cursos de distintos lenguajes de programación, incluyendo C++ y Python, cuenta con una aplicación para celular, y en general es muy recomendable para aprender conceptos de estos lenguajes. Ademas de ser recomendado por la guia de USACO.
Codecademy - Similar a SoloLearn, ofrece cursos de C++ y Python.
Para aprender algoritmos y estructuras de datos
CP Algorithms - Cuenta con extensas explicaciones e implementaciones muy buenas de casi todo tipo de algoritmo y estructura de datos, además de contar con problemas para practicar.
Visual Algo - Una página que explica distintos algoritmos y estructuras de datos de forma visual, muy útil para entender mejor cómo funcionan.
Libros
Libros de programación competitiva
Titulo | Comentarios |
---|---|
Competitive Programming - Steven Halim, Suhendry Effendy | Un libro que es completamente necesario leer si se aspira a ser bueno en competencias de programación. Cada tema explicado cuenta con una extensa lista de problemas a resolver. La primera edición es gratis. De aquí en adelante nos referiremos a este libro como CP4 |
Competitive Programmer’s Handbook - Antti Laaksonen | También indispensable leerlo, con la ventaja de que este libro tiene más implementaciones y es más directo explicando los distintos temas. Además es de libre acceso. |
Introducción en C++ a la Programación Competitiva - Capitulo estudiantil ICPC UMSA | Escrito por estudiantes y competidores de la UMSA en La Paz - Bolivia, a pesar de que su contenido no es tan fuerte, sus explicaciones son muy claras y es un buen libro para empezar. |
Problemas y Algoritmos - Luis E. Vargas Azcona | Otro libro en español, que además de tener implementaciones de distintos algoritmos, explica muy bien la lógica y la teoría detrás de cada uno. |
Libros de matemáticas
Coming soon
Jueces Online
Los jueces online son páginas que permiten resolver problemas de programación competitiva, y que además califican las soluciones de forma automática.
Jueces con competencias periódicas
Juez | Comentarios |
---|---|
Codeforces | El juez online más popular, tiene competencias con problemas nuevos cada semana, su sistema de ranking es muy eficiente en determinar el nivel de los competidores. Además al tener competencias semanales, tiene una cantidad inmensa de problemas, todos con tags para poder identificar con que temas se resuelven, y la mayoría de ellos con editoriales para poder comprender como resolverlos. |
AtCoder | Juez online japones, parecido a Codeforces, pero con problemas de un enfoque distinto. |
CodeChef | Parecido a los dos anteriores, pero sus distintos tipos de competencias dan variedad a la clase de problemas que se pueden encontrar aquí. |
Jueces con problemas en español
Juez | Comentarios |
---|---|
OmegaUp | Juez online creado en México, que cuenta con una gran cantidad de problemas y cursos en español. |
beecrowd | Juez online brasileño. Muy buen recurso para problemas en español, además ordenados en categorías. |
JukiJudge | Juez con problemas en español, que cuenta con una gran cantidad de problemas de la OBI. |
OIAJ | Juez de la Olimpiada Informática Argentina, también cuenta con una gran cantidad de problemas en español usados en su olimpiada y de distintos temas. |
Jueces que todos deberían conocer/usar
Juez | Comentarios |
---|---|
Kattis | Posee una organización por dificultad impecable, además de ser usado bastante por el libro CP4. |
UVa Online Judge | Algo antiguo, pero con una cantidad loquísima de problemas de todo tipo, muy usado hoy en día por el libro CP4. Se recomienda ver sus problemas desde Vjudge, ya que la interfaz de vjudge es más amigable. También es importante mencionar a uHunt; una herramienta indispensable para trabajar con UVa, ya que viene por defecto con las listas de problemas recomendados en el CP4. |
SPOJ | Otro juez que ha existido por muchos años, su gran cantidad de problemas disponibles lo hace igual muy bueno para practicar. |
Project Euler | No es un juez realmente, pero cuenta con una inmensidad de problemas matemáticos y de razonamiento que se pueden resolver con la ayuda de un programa de computadora y mucho razonamiento. Es altamente recomendable para practicar la lógica matemática. |
Para UVa y muchos otros jueces existe la herramienta uDebug, en la que puedes poner casos de prueba para los problemas de estos jueces, y ver cuál es la salida esperada para dichos casos de prueba.
Jueces con problemas de olimpiadas internacionales
Juez | Comentarios |
---|---|
CSES | Juez online creado por el autor del Competitive Programmer’s Handbook, tiene una organización por categorías PERFECTA y contiene problemas de la BOI y CEOI hasta el año 2021. |
oj.uz | Este juez tiene problemas de muchísimas olimpiadas internacionales grandes en el mundo, no siempre se mantiene actualizado, pero al menos para IOI y APIO si lo hace. |
AIZU OJ | Juez online de la Universidad de Aizu en Japón, tiene problemas de la JOI y otras competencias de gran nivel. Además cuenta con un curso de C++ con problemas relacionados a cada tema aprendido, lamentablemente no tiene tutoriales. |
En el caso de oj.uz, que es el juez que recomendamos para practicar con problemas IOI, solo están disponibles los problemas en inglés.
Las traducciones, soluciones y comentarios de todos los problemas de IOI hasta el año 2021 se pueden encontrar en History of the International Olympiad in Informatics by Mārtiņš Opmanis o en el sitio oficial de la IOI.
Para compilar y correr los problemas con formato IOI en Codeblocks, pueden leer la siguiente guía: Compilar y correr problemas IOI en Codeblocks.
Para compilarlos desde consola, solo usar los comandos que vienen en el archivo compile_cpp.sh dentro de la carpeta de cada problema.
Listas de problemas y Roadmaps
Lista | Comentarios |
---|---|
Lista creada por el Dr. Mostafa Saad Ibrahim | Como el mismo Dr. explica en este post de Codeforces esta lista ha recibido feedback muy positivo a través de los años, contiene problemas por categorías y por dificultad. Además contiene links para editoriales y soluciones de muchos problemas. |
Lista para programadores nuevos | Igualmente creada por el Dr. Mostafa, esta lista contiene problemas organizados por dificultad, pero esta vez enfocada a programadores nuevos. |
CSES problemset | Como ya se mencionó, esta lista contiene categorías muy bien organizadas, muy recomendado para aprender lo básico sobre cada tema. |
The Ultimate Topic List | Creada por Shahjalal Shohag, es una lista impecable para aprender los temas mencionados, la ventaja que tiene sobre CSES es que esta lista también tiene implementaciones de cada tema. Además su blog tiene contenido muy interesante, otro post suyo muy destacable es List of useful equations in Competitive Programming. |
Las siempre confiables A2OJ ladders, renovadas | Reconstruida por codemastercpp a partir de lo que solían ser las ladders de A2OJ, esta página contiene problemas de Codeforces organizados de una manera extraordinaria, cada problema mencionado es muy recomendable, ya que no fue seleccionado por azar. |
Checklist de problemas | Creada por ko_osaga y mencionada en su blog de Codeforces, tiene problemas de distintas Olimpiadas Internacionales, solo hay que descargar la lista e ir checkeando cuando se resuelve un problema. |
Competitive Programming Roadmap | Creada por TheScrasse, es un roadmap (camino a seguir) para convertirse en un programador competitivo de al menos nivel intermedio. Enfocada a ser azul en Codeforces. |
NeetCode | Página con un roadmap para aprender programación competitiva, además de contar con una lista de problemas recomendados para cada tema. |
ACodedaily | Esta página cuenta con problemas organizados por dificultad segun Codeforces, además de contar con una lista de problemas recomendados para cada tema. Muy recomendable para subir de nivel en Codeforces. |
Implementaciones de algoritmos y estructuras de datos
Recursos en video
Videos | Comentarios |
---|---|
Training Camp Argentina | Cuenta con videos de los training camps en Argentina, desde el año 2020 hasta el 2022. |
Olimpiada Boliviana de Informatica - Youtube | Donde subimos los videos de las clases que hemos dado durante estos años, además de resoluciones de problemas de la OBI. |
Contribuciones
Si tienes alguna sugerencia o quieres contribuir a esta guía, porfavor contactame, ya que de momento no tengo un repositorio público para que puedan hacer pull requests.
Espero que esta guia haya sido de utilidad, e intentare ir actualizandola con el tiempo, con mas recursos y problemas.