Entrenamientos

Desde la OIFem organizamos anualmente un curso de programación y algoritmia que se imparte todos los domingos para preparar la competición, donde hay clases a las que podéis conectaros y os dejamos problemas para practicar entre sesiones. El de la edición de 2020/21 ya ha terminado, ¡pero estate al tanto para la siguiente edición! Hay varias sesiones para aprender C++ y os enseñaremos las estructuras de datos y algoritmos principales que necesitaréis: grafos, programación dinámica, backtracking... Proponemos problemas de entrenamiento de varias dificultades, desde iniciación a competitivo avanzado.

Concursos de la I OIFem (2021)

Concurso Soluciones
Clasificatorio (28/02) Soluciones: Concurso clasificatorio

Concurso de práctica 1 (07/03)

Problemas para practicar:

Problemas del concurso:

Soluciones: Concurso de práctica
 

Final

 

 

Soluciones: Final, día 1
Soluciones: Final, día 2

Concurso de práctica 2 (25/04)

Soluciones

Concurso de práctica 3

Soluciones

Materiales del curso de la I OIFem (2021)

Normalmente, tanto los deberes normales como los avanzados se pueden resolver con el contenido de la clase correspondiente, con la excepción del primer entrenamiento, cuyos deberes avanzados eran una prueba de nivel. El resto de semanas los problemas avanzados usan las técnicas aprendidas en clase, pero de formas algo más interesantes y combinando los nuevos conceptos con otros temas ya aprendidos.

Apuntes Deberes normales Deberes avanzados Soluciones
Apuntes Entrenamiento 1 HackerRank Entrenamiento 1

HackerRank Prueba de Nivel

Soluciones: Entrenamiento 1

Apuntes Entrenamiento 2 HackerRank Entrenamiento 2

Acepta El Reto- Tres Dedos en Cada Mano

Acepta El Reto- Poniendo la Mesa

IOI- Cluedo

Soluciones: Entrenamiento 2

Apuntes Entrenamiento 3

 

Addendum:

HackerRank Entrenamiento 3

HackerRank- Dividiendo

HackerRank- Pizzas

HackerRank- Palabras abcd

HackerRank- Multiplicación de matrices

HackerRank- Flipping Rectangles

IOI- Memory

IOI- Combo

HackerRank- Montañas rusas

HackerRank- Monedas 2

IOI- Miners

IOI- Raisins

IZhO- Bank

Soluciones: Entrenamiento 3

Apuntes Entrenamiento 4

Código hecho en clase

Addendum:

HackerRank Entrenamiento 4

IOI- Poi

HackerRank- Las Galletas de Jan

HackerRank- Monedas

HackerRank- Monedas 3

HackerRank- Horarios

CSES- Sum of Three Values

JOI- Stove

USACO Silver- Paired Up

HackerRank- Mazmorra

IOI- Detecting Molecules

IOI- Rice Hub

Soluciones: Entrenamiento 4
Apuntes Entrenamiento 5 (incluye addendum)

HackerRank Entrenamiento 5

HackerRank- Torres de Hanoi

HackerRank- Correo no deseado

HackerRank- Farolas y ladrones

HackerRank- Pintando piedras

Apoyo backtracking:

IOI- Cave

IOI- Scales

USACO Gold- Sabotage

HackerRank- Pintando Piedras 2

Soluciones: Apoyo

Soluciones: Entrenamiento 5

Apuntes Big O

Apuntes Estructuras de Datos

Extra: UVa- Team Queue

HackerRank Entrenamiento 6

CSES- Distinct Numbers

USACO Bronze- Don't be Last

USACO Silver- Cities and States

HackerRank- Juegos con Queta

USACO Bronze- Where Am I?

IOI- Deciphering the Mayan Writing

HackerRank- Borrando Letras del SMS

Soluciones: Entrenamiento 6

Apuntes Entrenamiento 7

Addendum Grafos (Ordenamiento topológico y aristas y nodos de corte)

Programa DP Diámetro

 

Para las que tengáis dudas con el tema de grafos y queráis consolidar, pueden veniros bien estos tutoriales:

HackerRank Entrenamiento 7

HackerRank- Componentes Conexas

HackerRank- Número de Erdös

HackerRank- Componentes Fuertemente Conexas

HackerRank- Aristas y Vértices de Corte

Apoyo grafos:

USACO Silver- Moocast

USACO Gold- Moocast

Timus- Topological Sorting

HackerRank-Dirigiendo las carreteras de Grafolandia

Soluciones: Apoyo

Soluciones: Entrenamiento 7

Apuntes Entrenamiento 8

Problema hecho en clase

Ayuda MST (podéis saltaros la sección de Prim)

Variaciones MST- artículo sobre los problemas de Olimpiadas basados en MST y cómo resolver esas variaciones (muy recomendado para ir más a fondo)

HackerRank Entrenamiento 8

IOI- Traffic Congestion

UVa- War

Apoyo:

HackerRank- Habitaciones

IOI- Connecting Supertrees

IOI- Dreaming

Soluciones: Entrenamiento 8
Apuntes Entrenamiento 9

HackerRank Entrenamiento 9

UVa- Commandos

HackerRank- Transporte carísimo

HackerRank- Caza de brujas

Apoyo:

HackerRank- La Pachanga

IOI- Crocodile

BOI- Graph

Soluciones: Entrenamiento 9

Apuntes Entrenamiento 10

Addendum: Árboles de Fenwick

HackerRank- Máximo del Segmento

CSES- Dynamic Range Sum Queries

CSES- Dynamic Range Minimum Queries

IOI- Arranging Shoes

APIO- Street Lamps

CSES- Salary Queries

Soluciones: Entrenamiento 10

 

Recursos recomendados

Para quienes quieran prepararse recomendamos una serie de recursos. Es fundamental aprender tanto el lenguaje de programación que usarás durante la competición como la lógica para resolver problemas y los algoritmos y estructuras de datos a usar.

 

Lógica y primeros pasos

Para empezar, aquí están dos plataformas para ir familiarizándote con la forma de pensar que buscamos:

  • Bebras: Problemas de lógica que no requieren conocimientos previos de programación
  • Descubre: Plataforma para dar de forma guiada tus primeros pasos en la programación

 

C++/Python

Cuando ya tengas algo de confianza, toca aprender uno de los lenguajes admitidos en la competición. Python es algo más sencillo de aprender, pero C++ tiene la ventaja de que es el admitido en las olimpiadas internacionales (incluida la Europea Femenina) y por tanto podrás aprovechar lo aprendido en el caso de clasificarte, en vez de tener que empezar con otro lenguaje.

Para aprender Python

  • CS Dojo: Lista de reproducción que te guiará a través del proceso de aprender Python de una forma amena pero detallada.
  • CodingBat: Problemas de iniciación creados para practicar Python desde la comodidad de tu buscador. Recibirás feedback instántaneo sobre tu solución.
  • Sección de Python de los manuales de las Olimpiadas: Artículos cortos de Python para aprender lo necesario del lenguaje de cara a empezar a competir.

Para aprender C++

  • Tutorial Programiz: Tutorial online muy intuitivo y con bastantes ejemplos. Bueno para empezar.
  • A Tour of C++: Guía del creador del lenguaje para quien quiera profundizar más. Tened en cuenta que el foco de la OIFem es mucho en los algoritmos y la forma de resolver el problema, pero suele requerir un nivel no muy avanzado del lenguaje en cuestión. No obstante, puede ser útil para quien quiera un conocimiento más a fondo.
  • Sección de C++ de los manuales de las Olimpiadas: Artículos cortos de C++ para aprender lo necesario del lenguaje de cara a empezar a competir.

 

Algoritmia

En cuanto estés a gusto programando en el lenguaje que vayas a usar, toca empezar a resolver problemas del estilo de la OIFem, para ir haciéndote a ellos. Estos se encuentran en jueces online, que son unas plataformas con problemas de varias dificultades que te corrigen la solución al momento. Para poder resolver estos problemas, te hacen falta una serie de conocimientos previos de algoritmia. Para obtener esos conocimientos, están muy bien los siguientes recursos:

  • CodeMonk: Serie de problemas en HackerEarth con tutoriales y partidos por tema. Los temas que explica son bastante similares a los que entran en la final de la OIFem, por lo que si superas todos los niveles ¡tendrás poco más por aprender!
  • Algorithms Illuminated: Serie de cursos online con su correspondiente colección de libros. Muy recomendable para aprender a analizar la corrección y eficiencia de los algoritmos.
  • Competitive Programming 4: La referencia por excelencia de programación competitiva. Acompaña al juez online de UVa, sugiriendo problemas que resolver para repasar el contenido de cada capítulo. Además, los autores han preparado un repositorio de GitHub con sus implementaciones de los algoritmos que explican.
  • An Introduction to the USA Computing Olympiad: libro de texto para empezar con programación competitiva. Muy detallado y recomendado, pero la materia que explica pronto se queda escasa. De todas formas, muy bueno para los primeros meses/primer año que aprendáis algoritmia.
  • Apuntes de algoritmia del curso de Skiena en Stony Brook: Resumen de los principales algoritmos usados en programación competitiva.
  • Sección de algoritmia de los manuales de las Olimpiadas: Explicaciones de los algoritmos con problemas de Olimpiadas variadas de otros años.
  • USACO Guide: Guía con los temas más frecuentes en Olimpiadas, con links a problemas de competiciones anteriores para practicar. Hace fácil medir tu progreso.
  • Competitive Programmer's Handbook: Guía abierta online sobre programación competitiva, con una serie de 200 problemas para repasar la implementación de estos algoritmos y estructuras.

 

Matemáticas

Esta sección es opcional, pero a las que os interesen mucho las matemáticas puede seros útil lo siguiente:

  • Mathematics for Computer Science: libro online para aprender sobre la intersección entre estos dos campos. Especialmente recomendadas las secciones de grafos y teoría de números para bordar esos problemas.
  • Problems in Elementary Number Theory: libro online con numerosos problemas de teoría de números que puede ser útil para familiarizarse con este campo y ganar destreza resolviendo problemas algorítmicos de esta índole.
  • Project Euler: web con problemas en la intersección entre las matemáticas y la programación. Útil para hacer problemas que requieran matemáticas pero no necesariamente un gran dominio sobre un lenguaje de programación concreto.

 

Problemas

Y ahora lo más interesante: los jueces online. Aquí va una selección con los más recomendados para preparar la OIFem:

  • Problemas de ediciones anteriores de la OIE.
  • ¡Acepta el reto!: Muchos problemas (y en español) a resolver online en C, C++ o Java. Contiene problemas de ediciones anteriores de concursos como AdaByron o Las 12 Uvas.
  • Jutge: Juez online con miles de problemas organizados y lecciones para que aprendas y practiques con ellos.
  • Codeforces: Tiene problemas de todos los niveles, organiza competiciones online con mucha frecuencia y ayuda a medir tu progreso a través del sistema de "rating".
  • oj.uz y DMOJ: Plataformas con problemas de ediciones pasadas de Olimpiadas de otros países y de la IOI. Son problemas bastante difíciles por regla general, así que es mejor probar con estos tras cierta experiencia con problemas de los otros links, especialmente de la OIE.
  • UVa Online Judge: Juez online muy conocido y que acompaña al libro citado en el párrafo anterior: CP4. Tiene varias carpetas con problemas organizados por categoría.
  • OmegaUp: Juez online utilizado en la Olimpiada Iberoamericana de Informática que contiene lecciones de C++, Python y algoritmia, además de problemas de olimpiadas de años anteriores.
  • HackerRank: Juez online utilizado durante la OIFem.