Módulos
Módulo I: Introducción y Estructuras de Datos
¿Qué se verá?
- Introducción a la Programación Competitiva
- Estructura del curso
- Tipos de problemas y competiciones
- Novedades de este año y herramientas que utilizaremos
- ¿Qué es un juez? ¿Cómo funciona?
- Primeros concursos
- Complejidad en tiempo
- Arrays, Vectors
- Strings
- Listas, Pilas, Colas
- Conjuntos
- Mapas
- Colas de prioridad
- Árboles
Ejercicios
Recursos
Competitive Programming 3/4
Introducción a los algoritmos
Guide to Competitive Programming: Learning and Improving Algorithms Through Contests
Módulo II: Algoritmia básica
¿Qué se verá?
- Algoritmos de Ordenamiento
- Algoritmos de Búsqueda
- Algoritmos Voraces
- Ventana deslizante
- Otras estrategias
Concursos
El concurso de este módulo se realizará en conjunto con el Módulo III.
Ejercicios
A. Closest Sums
B. Suspension Bridges
C. Reconnaissance
D. Tree Shopping
E. A Furious Cocktail
F. Martian DNA
G. Counting Subsequences (Hard)
Módulo III: Iniciación a Grafos
¿Qué se verá?
- Representación
- Recorridos por anchura
- Recorridos en profundidad
- Caminos de coste mínimo
Ejercicios
A. Modulo Solitaire
B. Invasion
C. VisuAlgo Online Quiz
D. Conquest Campaign
E. Hiding Places
F. Elevator Trouble
Módulo IV: Fuerza bruta y Programación Dinámica
¿Qué se verá?
- Introducción
- Estructura
- Memorización
- Tipos de Programación Dinámica
- Ejemplos
- Fibonacci
- Contar caminos
- Mochila
Calendario
Horario de 17:00 a 19:00, puedes observar el Aula y contenido de cada día pulsando encima de cada una de las fechas.
FEBRERO
7
IntroducciónLaboratorio III: 111
14
Módulo IED I
Laboratorio III: 111
21
ConcursoED I
Laboratorio III: 111
28
Módulo IED II
Laboratorio III: 111
MARZO
7
Módulo IIAlgoritmia
Laboratorio III: 111
14
Módulo IIIGrafos
Laboratorio III: 111
21
ConcursoAlgoritmia + Grafos
Laboratorio III: 111
28
Módulo IVFuerza bruta y DP
Laboratorio III: 111
ABRIL
11
Concurso FinalLaboratorio III: 111
Herramientas necesarias
Es recomendable tener instalado un entorno de desarrollo para el lenguaje de programación que se desee utilizar. Por su sencillez y rápido aprendizaje, el curso se va a realizar utilizando principalmente Python. Sin embargo, como el lenguaje más utilizado en programación competitiva debido a su velocidad es C++, y los mejores equipos históricos de la universidad mucha gente usa Java, se va a proporcionar ayuda para estos otros lenguajes.
Para las sesiones y los concursos, podréis utilizar los entornos de desarrollo que tenéis en el entorno virtual de los laboratorios. Para practicar en casa, aunque se puede utilizar el entorno virtual desde la herramienta de MyApps de la Universidad Rey Juan Carlos, se recomienda tener preparado el entorno en vuestros dispositvos.
¿Dónde encontrarnos?
Tenemos dos grupos de Telegram para todos los asistentes. Uno pertenece al grupo de programación competitiva y otro a la asociación de Dijkstraidos. En ambos podeis consultar las dudas que tengáis y ayudaros mutuamente, junto con los profesores. En el grupo de la asociación además podrás disfrutar de una comunidad y organizar diferentes actividades ¿A qué esperas para unirte? ¡Creemos comunidad!
Preguntas frecuentes
-
¿Qué es la programación competitiva?
Son competencias donde se mide las habilidades de programación y algoritmia de los participantes para resolver un conjunto de problemas lógicos y matemáticos.
Muchas empresas realizan este tipo de competiciones en sus entrevistas de trabajo (Amazon, Google, Facebook, etc). Los participantes en programacióm competitiva tienen alguna ventaja al conocerlo de antes.
-
¿Necesito previamente conocer un lenguaje de programación?
Es recomendable pero no necesario, el curso se aborda desde cero explicando los conceptos en los lenguajes de Python, Java y C++.
-
¿En que lenguaje se da el curso?
El curso aborda la mayoría de algoritmos en pseudocódigo y se facilitan los códigos en diversos lenguajes como Python, Java y C++. Sin embargo, para la realización de problemas en las sesiones, se realizará la solución en Python y se proprocionarán las soluciones en el resto de lenguajes.
-
¿Puedo asistir al curso si no tengo conocimientos?
¡Claro que sí! En este curso abordaremos los diferentes conceptos y módulos desde un nivel introductorio, sin dejar de lado a aquellos asistentes más aventajados. Lo único necesario son ganas de aprender y de compartir el conocimiento con los demás.
-
¿Cuándo y dónde se desarrolla el curso?
El curso se impartirá los viernes de 17:00 a 19:00 presencial (previa inscripción).
El aula en el que se desarrolle será la 111 del edificio de Laboratorios III.
-
¿Qué material necesito para seguir las clases?
Revisa el apartado de Materiales necesarios para traer preparado todo lo imprescindible para clase. Si tienes alguna problema, no dudes en preguntarnos por los grupos de Telegram.
-
¿Se otorgan créditos RAC por asistir?
Sí, el curso tiene una duración de 24 horas repartidas en clases de 2 horas a la semana. Esto equivale a 1.2 créditos RAC reconocidos por la Universidad para aquellos asistentes que acudan y participen activamente en las sesiones.
-
¿Quedarán grabadas las clases?
No se grabará el curso.
-
¿Qué material o plataformas recomendáis para practicar?
Si quieres ir adentrándote en el mundillo y practicando con algunos problemas, puedes empezar con Kattis. También puede ayudarte toda la información de la web personal de uno de los entrenadores.
Si no solo sabes en programar en Python y quieres probar otras plataformas que permiten enviar soluciones en C++ o Java, puedes probar con Acepta el Reto.
Si tu nivel es más avanzado, ¿te atreverás con los retos de Codeforces?