Entrenamiento OIE 2023 - Nivel avanzado

Bienvenido al entrenamiento de la OIE'2023 enfocado a aquellos que están ya tienen experiencia con la algoritmia y la programación competitiva.

El entrenamiento está organizado sobre el juez on-line Virtual Judge. Si quieres participar, necesitarás crearte un usuario en el juez (si tienes ya uno, puedes utilizar ese) y registrarte aquí.

El entrenamiento está dividido en once sesiones de dos semanas de duración, que comienzan los lunes a las 9:00. Durante cada sesión se espera que los participantes revisen los contenidos enlazados de esa sesión e intenten los problemas propuestos. Las dudas que puedan surgir pueden hacerse usando el discord de la OIE. Cuando terminan las dos semanas, además de comenzar la sesión siguiente, se publican algunas explicaciones sobre los problemas de la sesión para que aquellos que no los hayan conseguido resolver puedan seguir intentándolo.

Resumen
Sesión Fecha de inicio
#13 de octubre
#217 de octubre
#331 de octubre
#414 de noviembre
#528 de noviembre
#612 de diciembre
#79 de enero
#823 de enero
#96 de febrero
#1020 de febrero
#116 de marzo

Resumen del entrenamiento

El entrenamiento está dividido en 11 sesiones que puedes ver en la tabla derecha. Cada sesión tiene una duración de dos semanas; en la tabla aparece la fecha de comienzo. Las sesiones que no han comenzado aún aparecen en negro. Las ya empezadas (incluidas las terminadas) aparecen en azul y el enlace lleva a la información de la sesión. A esa misma información puedes acceder pulsando sobre su pestaña en la parte superior.

#1

Primera sesión de la serie de entrenamientos.

Esta primera sesión está dedicada a la resolución de problemas interactivos. En la mayoría de problemas de programación competitiva, tu programa tiene a su disposición todos los datos de entrada y la dificultad está en procesar esos datos eficientemente para finalmente imprimir la salida correcta. En los problemas interactivos, el planteamiento cambia un poco: tu programa no dispone de toda la información inicialmente, sino que debe interactuar con el juez para ir obteniendo la información necesaria. Este tipo de problemas no aparece en muchos concursos de programación, pero tanto en la OIE como sobre todo en la IOI sí aparecen, por tanto inauguramos esta serie de entrenamientos con una sesión dedicada a la resolución de estos problemas para familiarizarnos con ellos.

Más información: Soluciones:
#2

Segunda sesión de la serie de entrenamientos.

Esta segunda sesión está dedicada a la resolución de problemas constructivos. Estos son problemas en los que te piden construir un determinado objeto que satisfaga una serie de propiedades.

Más información: Soluciones:
#3

Tercera sesión de la serie de entrenamientos.

Esta tercera sesión está dedicada a problemas que requieren calcular eficientemente el ancestro común más bajo de dos vértices en un árbol enraizado.

Más información:
#4

Cuarta sesión de la serie de entrenamientos.

Esta sesión trata sobre dos técnicas para resolver problemas sobre árboles: Heavy-Light Decomposition y Centroid Decomposition.

Más información:
#5

Quinta sesión de la serie de entrenamientos.

En esta sesión trabajamos con algunos pequeños "trucos" que permiten mejorar la complejidad de nuestras soluciones a problemas de programación dinámica.

Más información:
#6

Sexta sesión de la serie de entrenamientos.

Este entrenamiento va sobre algoritmos sobre grafos. Los problemas principalmente están centrados en estos dos temas: componentes fuertemente conexas y emparejamiento máximo en un grafo bipartito.

Más información:
#7

Séptima sesión de la serie de entrenamientos.

Más información:
#8

Octava sesión de la serie de entrenamientos.

Esta sesión combina problemas que usan 2 estructuras de datos: BBSTs y tries

Los árboles binarios balanceados de búsqueda (BBST) son una estructura de datos básica. Aunque en la librería estándar de C++ ya hay una implementación con la funcionalidad más importante (std::set, y en el caso de los compiladores de GNU hay una implementación con funcionalidad extendida en los policy based data structures), a veces hay que implementarlo por nuestra cuenta para que soporte las operaciones que queremos. En programación competitiva, entre los diferentes tipos de BBST que existen, se suele preferir el treap, por su facilidad de implementación y la gran variedad de operaciones que permite realizar.

Los tries son estructuras de datos muy sencillas que se suelen usar principalmente en problemas de procesamiento de cadenas, pero también aparecen en otros contextos y con un poco de creatividad se pueden aplicar de forma muy poderosa.

Más información:
#9

Novena sesión de la serie de entrenamientos.

En esta sesión no hay manuales; es una de las sesiones puramente de resolución de problemas.

#10

Décima sesión de la serie de entrenamientos.

Esta sesión trata sobre Geometría Computacional.

Más información:
#11

Undécima sesión de la serie de entrenamientos.

Esta sesión trata sobre temas avanzados de estructuras de datos.

Más información: