Guía de Problemas Interactivos
posted on Jan. 12, 2025, 9:28 p.m. 1A veces puedes encontrarte con problemas interactivos en distintos concursos de programación (DMOJ, Codeforces, AtCoder, IOI, APIO, CEOI, BOI, etc.).
En problemas de este tipo, los datos de entrada dados a tu programa pueden no estar predeterminados, sino que se construyen específicamente para tu solución. El jurado escribe un programa especial - interactor, de tal manera que su salida se envía a la entrada de tu solución, y la salida de tu programa se envía a la entrada del interactor. En otras palabras, tu solución y el interactor intercambian los datos y deciden qué imprimir basándose en el «historial de comunicación».
Cuando se escribe una solución para algún problema interactivo es importante tener en cuenta que es posible que en la salida algunos datos se coloquen primero en algún búfer interno y no sean transferidos directamente al interactor. Para evitar esta situación hay que utilizar una operación especial flush
cada vez que se envían datos. Existen estas operaciones en las bibliotecas estándar de casi todos los lenguajes. Por ejemplo, en C++ puedes usar fflush(stdout)
o cout << flush
(esto depende de lo que uses para la entrada y salida de datos — scanf/printf
o cout
). En Java puedes usar el método flush para el flujo de salida, por ejemplo, System.out.flush()
. En Python puedes usar stdout.flush()
. En Pascal puedes usar flush(output)
.
En la solución del siguiente problema puedes ver ejemplos de cómo usarlo en C++:
A continuación, se comparte una lista de problemas interactivos que pueden resolverse en otros jueces en línea:
- https://dmoj.ca/problem/tle17c5p1
- https://dmoj.ca/problem/ludipq
- https://dmoj.ca/problem/aac5p2
- https://oj.uz/problem/view/IOI20_stations
- https://oj.uz/problem/view/BOI21_books
Se irán subiendo más problemas interactivos al DMOJ.
En caso de que deseen resolver más problemas interactivos, pueden filtrar por interactivos en el dmoj.ca o en Codeforces. Si prefieren interactivos de olimpiadas internacionales, en el oj.uz están identificados con una etiqueta de interactivos.
Cualquier duda pueden preguntarla en los comentarios de este post.