Olimpiada Mexicana de Informática
Practica para la OMI con casos de prueba
Escribe tu solución, pon los ejemplos del problema como casos de prueba y mira al instante cuáles pasan. Gratis, sin registro y en C++, el lenguaje del examen nacional, además de Python, Java y C.
Por el equipo de OnlineCompiler.io. Actualizado el .
¿Qué es la OMI?
La Olimpiada Mexicana de Informática (OMI) es el concurso nacional de programación para estudiantes de nivel básico y medio superior, organizado por el Comité Mexicano de Informática (COMI). Cada estado hace su propio proceso de selección y manda a sus 4 mejores concursantes al examen nacional, y de ahí sale la selección que representa a México en la Olimpiada Internacional de Informática (IOI). Para primaria y secundaria está la OMIPS, cuyo examen de eliminatoria se resuelve en Karel.
La 31ª OMI ya terminó: el examen nacional fue el 10 y el 11 de octubre de 2026 en la Universidad Politécnica Metropolitana de Hidalgo, en Pachuca, y el registro cerró el 24 de mayo. En 2026, la eliminatoria de la OMIPS fue en línea el 20 de junio. La convocatoria de 2027 aún no se ha publicado en la página oficial; para las fechas de tu estado, pregunta a tu delegado estatal.
Problema de ejemplo: La alcancía de Mariana
Un problema corto, del estilo de un examen estatal, escrito por nosotros para esta práctica (no viene de ningún examen de la OMI). El editor ya trae una solución en C++. Presiona Ejecutar pruebas y mira cómo pasan los tres ejemplos; luego cambia el código o las pruebas.
La alcancía de Mariana
Durante N días, Mariana anotó cuánto dinero metió en su alcancía: el día i metió ai pesos. Sus amigos le hacen Q preguntas, y cada una da dos días l y r: ¿cuánto dinero metió desde el día l hasta el día r, contando los dos?
Entrada
En la primera línea, dos enteros N y Q. En la segunda, N enteros a1, a2, …, aN. Cada una de las siguientes Q líneas tiene dos enteros l y r.
Salida
Q líneas: en la línea j, la respuesta a la pregunta j.
Límites
- 1 ≤ N, Q ≤ 100,000
- 0 ≤ ai ≤ 109
- 1 ≤ l ≤ r ≤ N
Ejemplos
Entrada 1
5 3 10 20 5 0 15 1 5 2 3 4 4
Salida 1
50 25 0
Entrada 2
1 1 100 1 1
Salida 2
100
Entrada 3
3 2 1000000000 1000000000 1000000000 1 3 2 3
Salida 3
3000000000 2000000000
#include <bits/stdc++.h>
using namespace std;
int main() {
// Entrada rápida: separa cin de stdio y no vacía cout antes de cada lectura
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
cin >> n >> q;
// suma[i] = a_1 + ... + a_i, en long long porque puede pasar de 2^31
vector<long long> suma(n + 1, 0);
for (int i = 1; i <= n; i++) {
long long a;
cin >> a;
suma[i] = suma[i - 1] + a;
}
while (q--) {
int l, r;
cin >> l >> r;
cout << suma[r] - suma[l - 1] << "\n";
}
return 0;
} 5 3 10 20 5 0 15 1 5 2 3 4 4
Casos de prueba
Hasta 8 pruebas. Cada una ejecuta el código de arriba con su propia entrada.
Prueba 1
Prueba 2
Prueba 3
La prueba 3 suma tres mil millones de pesos, más de lo que cabe en un int (hasta
231 − 1). Cambia los long long por int y vuelve a ejecutar: la prueba 3
falla con respuesta incorrecta. Es de los errores que más puntos cuestan en un examen.
Para practicar en Python, elige Python en el menú del editor y pega esta versión. Las pruebas siguen sirviendo.
import sys
# Lee toda la entrada de una vez: mucho más rápido que input() con N y Q grandes
datos = sys.stdin.buffer.read().split()
n, q = int(datos[0]), int(datos[1])
suma = [0] * (n + 1)
for i in range(1, n + 1):
suma[i] = suma[i - 1] + int(datos[1 + i])
respuestas = []
pos = n + 2
for _ in range(q):
l, r = int(datos[pos]), int(datos[pos + 1])
pos += 2
respuestas.append(suma[r] - suma[l - 1])
# Imprime todo junto en vez de llamar a print() Q veces
print("\n".join(map(str, respuestas)))Cómo practicar con casos de prueba
- Copia los ejemplos del problema como pruebas: cada ejemplo es una entrada y su salida esperada. Caben hasta 8 pruebas a la vez.
- Lee de la entrada estándar y escribe en la salida estándar, como en los problemas de la OMI en omegaUp. Nada
de archivos ni de mensajes como
Dame N:, que se vuelven parte de la salida y reprueban la prueba. - Agrega tus propias pruebas para los casos que más tumban soluciones: el N más pequeño, los valores más grandes permitidos (como la prueba 3), todos los valores iguales y l = r.
- Presiona Ejecutar pruebas. Cada prueba muestra si pasó y, si no, lo que imprimió tu programa.
La comparación por defecto ignora los espacios al final de las líneas y las líneas en blanco del final, como la mayoría de los jueces. Para ejecutar un programa una sola vez, con una entrada, usa el compilador C++ online o el compilador Python online.
Tiempo límite y eficiencia
Aquí cada prueba puede correr hasta 2 segundos (Java tiene 1 s más para arrancar la JVM), con 512 MB de memoria. En omegaUp, cada problema trae su propio límite: en los problemas de la OMI 2024 que revisamos va de 1 a 6.5 segundos, con unos 512 MB de memoria. Mira los límites antes de programar: con N y Q hasta 100,000, sumar el rango en cada pregunta son hasta 10 mil millones de operaciones y no termina a tiempo; con sumas prefijas, como en la solución de ejemplo, cada pregunta es una resta.
El tiempo que mides aquí no es el de las computadoras del examen. Úsalo para comparar dos soluciones tuyas, no como garantía.
Leer la entrada rápido en C++ y Python
Con decenas de miles de números en la entrada, la forma de leer ya marca la diferencia.
C++: al principio del main, quita la sincronización de cin con C,
o usa scanf y printf (sin mezclar las dos formas después de eso). Y cambia endl por "\n", porque endl vacía la salida en cada línea.
ios::sync_with_stdio(false); // cin y cout sin sincronizarse con scanf y printf
cin.tie(nullptr); // cin ya no vacía cout antes de cada lectura
int n;
cin >> n;
cout << n << "\n"; // "\n" en lugar de endlPython: lee todo de una vez en lugar de llamar a input() miles de veces, e
imprime las respuestas juntas al final. Si prefieres leer línea por línea, sys.stdin.readline también es mucho más rápido que input().
import sys
datos = sys.stdin.buffer.read().split() # todos los números de la entrada, de una vez
n = int(datos[0])
valores = list(map(int, datos[1:n + 1]))
respuestas = [str(v * 2) for v in valores]
print("\n".join(respuestas)) # una sola escritura, al finalLos lenguajes de la OMI aquí
Para el examen nacional, la convocatoria 2026 pide que los concursantes sepan programar en C/C++, con Visual Studio Code o Code::Blocks, y no publica la versión del compilador ni sus opciones. Para practicar, la lista oficial de problemas enlaza los exámenes nacionales pasados a omegaUp. Así se compara cada lenguaje:
| Lenguaje | En la OMI | En omegaUp | Aquí | Qué cambia |
|---|---|---|---|---|
| C++ | La convocatoria del nacional pide C/C++ | C++17 o C++20, con g++ 11 y -O2 | G++ 15: g++ -O2 -Wall code.cc -o code.out, en GNU C++17 | Aquí no hay C++20: set::contains, std::popcount y std::ranges no compilan. Con C++17 en omegaUp, lo que compila aquí en general compila allá. |
| C | La convocatoria del nacional pide C/C++ | C11, con gcc 11 y -O2 -lm | GCC 15: gcc -O2 code.c -o code.out -lm, en GNU C23 | Aquí bool, true y false funcionan sin stdbool.h; en
omegaUp, con C11, tienes que incluirlo. |
| Python | El nacional pide C/C++ | Python 3.10 | Python 3.14 | Sirve para practicar la lógica, pero el nacional es en C/C++. En omegaUp evita lo que llegó después
de 3.10, como las f-strings con las mismas comillas adentro (f"{d["x"]}"), que son de
Python 3.12. |
| Java | El nacional pide C/C++ | OpenJDK 17 según su documentación, con la clase Main | OpenJDK 25 | Llama Main a tu clase y funciona en los dos. Lo que llegó después de Java 17 no está en
omegaUp. |
| Karel | La eliminatoria de la OMIPS es en Karel v2.0 (ReKarel), en CMS | Sí, con sintaxis de Pascal o de Java | No | Aquí no hay Karel. Practica en ReKarel o en el Karel de omegaUp. |
Esta página no es omegaUp ni el evaluador del examen. Aquí no hay pruebas ocultas ni subtareas, y el tiempo medido no es el de las computadoras del examen. Para los problemas de verdad, usa la lista de problemas del sitio de la OMI, que enlaza a omegaUp, y los exámenes pasados.
Para profesores, entrenadores y delegados
Todo lo de esta sección es gratis. La documentación de cada herramienta está en inglés.
Mandar un código al grupo
En las páginas de compilador en inglés, como la de C++ y la de Python, el botón Share genera un enlace con el código y la entrada, sin cuenta. El enlace dura 90 días; con Save, se guarda en tu cuenta. Lleva el código y una entrada, no los casos de prueba.
Poner el editor en la página de tu escuela
El editor de esta página es un widget que puedes poner en la página de tu escuela o de tu curso, con una cuenta
gratis y un fragmento de HTML. Con data-locale="es", los botones aparecen en español. Mira cómo insertar el editor y la referencia del widget (en inglés).
Un juez de entrenamiento para tu estado o tu escuela
La API run-tests (en inglés) recibe el código y una lista de pruebas, y devuelve
el veredicto de cada prueba y una calificación de 0 a 100; es la que usa esta página. Las pruebas marcadas como hidden devuelven solo el veredicto, como en un juez de verdad, y el tiempo límite por prueba llega
hasta 30 segundos. El plan Free incluye 100,000 ejecuciones al mes (cada prueba cuenta como
una) y hasta 8 pruebas por solicitud. Para armar el tuyo, mira cómo construir un juez en línea (en inglés).
Preguntas frecuentes
¿Esta página es el juez de la OMI?
No. Es una herramienta independiente para practicar: ejecutas tu solución contra las pruebas que escribas y ves al instante cuáles pasan. Los exámenes de la OMI se presentan en la plataforma que indica el COMI, y los problemas de exámenes pasados están en omegaUp.
¿En qué lenguaje es el examen de la OMI?
Para el examen nacional de 2026, la convocatoria pide C/C++. La eliminatoria de la OMIPS de 2026 fue en Karel v2.0 (ReKarel). Los exámenes estatales los define el comité de cada estado.
¿Puedo practicar Karel aquí?
No, aquí no hay Karel. Para Karel usa ReKarel, el que pide la OMIPS, o el Karel de omegaUp. Aquí puedes practicar C++ para cuando pases a la OMI.
¿Por qué mi código compila en omegaUp y aquí no?
Lo más probable es que uses algo de C++20, como set::contains o std::ranges, con C++20 elegido en omegaUp. Aquí g++ usa su estándar por defecto, GNU C++17. Cámbialo por su equivalente en C++17, como count() en lugar de contains().
¿Cuál es el tiempo límite aquí?
2 segundos por prueba, con 512 MB de memoria (Java tiene 1 s más para arrancar). En omegaUp, cada problema muestra su propio límite.
¿Necesito una cuenta?
No. Para ejecutar código y pruebas en esta página no necesitas cuenta, y no hay anuncios. La cuenta, que es gratis, solo hace falta para usar la API o poner el editor en la página de tu escuela.
¿Cuándo es la próxima OMI?
La convocatoria de 2027 aún no se había publicado al 2 de noviembre de 2026. En 2026, el registro cerró el 24 de mayo y el examen nacional fue en octubre, así que conviene empezar a practicar a principios de año. Revisa la página oficial de la OMI y pregunta a tu delegado estatal.