TCP 2024
TCP 2024
TCP 2024
05-10-2024
Sedes:
Universidad Cátolica del Norte (Antofagasta)
Universidad Cátolica del Norte (Coquimbo / La Serena)
Universidad Andrés Bello (Viña del Mar)
Universidad de Valparaı́so (Valparaı́so)
Universidad Técnica Federico Santa Marı́a (Santiago)
Universidad de O’Higgins (Rancagua)
Universidad de Talca (Talca)
Universidad de Concepción (Concepción)
Agradecimientos:
Agradecer a: Javier Oliva y Gabriel Carmona, que ayudaron a redactar, testear y armar el contest; Benjamı́n
Rubio, Martı́n Muñoz y Javier Marinkovic, que ayudaron a preparar problemas; Roberto Ası́n, Javier Ro-
bledo, Gonzalo Fernández, Bernardo Subercaseaux, Martı́n Andrighetti y Javier Reyes, que entregaron ideas
para los problemas; Blaz Korecic, Diego Arias y Ignacio Muñoz a testear los problemas y entregar feedback;
Cristı́an Ruz, Eric Ross, Waldo Gálvez, Ricardo Brrientos, Roberto Muñoz, Rodrigo Olivares, Giannina
Costa, Diego Urrutia, Erik Regla que permitieron la organización esta competencia presencialmente en las
diversas sedes; Bruno Ribas que nos ayudo a settear al contest en el juez BOCA.
Torneo Chileno de Programación 2024
Problema A
Super-carreteras
autor: Benjamı́n Rubio
La ciudad de Coquimbo se prepara para ser anfitrión de la ICPC por tercera vez, para eso se planea la
construcción de unas nuevas súper-carreteras que harán el transporte desde la universidad a diversas partes
de la ciudad mucho más rápido.
La estructura original de la ciudad puede ser vista como un árbol de caminos bidireccionales con pesos
de n nodos 1, . . . , n con raı́z en la universidad (representada por el nodo 1). Se planea la construcción de
m súper-carreteras, cada súper-carretera puede ser representada por un trı́o de nodos a, b, c ∈ {1, . . . , n} y
un largo positivo w ≤ 109 permitiendo moverse entre cualquier nodo en el camino entre a y b en el árbol
original al nodo c, en w minutos, estas nuevas carreteras son unidireccionales, es decir no es posible ir del
nodo c a nodos en el camino de a a b usándola.
Input
El input inicia con una lı́nea con 2 enteros n, m (2 ≤ n ≤ 5 · 105 , 0 ≤ m ≤ 5 · 105 ), la cantidad de nodos en
la ciudad y la cantidad de súper-carreteras.
Luego vienen n − 1 lı́neas describiendo los caminos originales de la ciudad. Cada lı́nea consiste de 3 enteros
u, v, w (1 ≤ u, v ≤ n, u ̸= v, 1 ≤ w ≤ 109 ), los nodos conectados por este camino y el largo w del camino.
Finalmente hay m lı́neas describiendo las súper-carreteras. Cada lı́nea consiste de 4 enteros a, b, c, w (1 ≤
a, b, c ≤ n, 1 ≤ w ≤ 109 ) describiendo la estructura de la súper-carretera y su largo.
Output
Debes imprimir n − 1 enteros, la distancia mı́nima desde el nodo 1 a cada otro nodo 2, . . . , n en orden.
Ejemplos
Problema B
La Barra de Sushi
autor: Gonzalo Fernández
Tu equipo ha logrado resolver todos los problemas del Torneo Cosmogónico de Plurivocalización. Aunque
no ganaron, están contentos con su desempeño. Como es costumbre, ningún torneo termina sin un merecido
festı́n, ası́ que deciden ir al restaurante de sushi más cercano, sin imaginar que allı́ los platos se sirven de
una manera muy particular.
En este restaurante, los platos se disponen en una barra, alineados uno al lado del otro y numerados conse-
cutivamente desde el 1. Cada plato contiene una cantidad distinta de piezas de sushi. Para ordenar, deben
seleccionar un subconjunto contiguo (*) de platos, y el costo final será el número de platos elegidos.
Con un presupuesto limitado y, como buenos amigos, quieren asegurarse de que la cantidad total de sushi
de los platos seleccionados sea divisible por el número de miembros del equipo. Deciden entonces buscar la
combinación de platos que les permita obtener la mayor cantidad de sushi sin exceder el presupuesto. Tras
varios intentos fallidos, se dan cuenta de que es un problema más complejo de lo que parecı́a, y deciden
aprender a programar para resolverlo de una vez por todas.
(*) Un subconjunto contiguo es una parte de un conjunto en la que los elementos están uno al lado del otro,
sin que haya saltos entre ellos. Por ejemplo, en el conjunto {5, 10, 15, 20, 25}: {10, 15, 20}, {15, 20} y {5} son
algunos subconjuntos contiguos; {5, 15} y {10, 25} no son subconjuntos contiguos.
Input
El input consiste en 2 lı́neas, la primera lı́nea contiene 2 enteros N (2 ≤ N ≤ 109 ), y M (1 ≤ M ≤ 105 ),
indicando la cantidad de integrantes del equipo y el presupuesto máximo a gastar, respectivamente.
La segunda lı́nea contiene un entero S (1 ≤ S ≤ 105 ), indicando la cantidad de platos en la barra, seguido
de S enteros Si (1 ≤ Si ≤ 109 ), indicando la cantidad de piezas en el plato número i. Todos los enteros están
separados por un espacio.
Output
El output debe contener dos enteros separados por un espacio i y j, indicando que se tomarán los platos
en el rango [i, i + j − 1]. En caso de no existir una solución, se debe imprimir “-1 -1”. Si hay múltiples
soluciones posibles, deben imprimir la que empiece primero.
Ejemplos
Nota
En el primer ejemplo, se tienen 5 platos con las siguientes cantidades de sushi: {5, 10, 15, 20, 25}. Los siguientes
subconjuntos contiguos cumplen con las dos condiciones: no exceden el presupuesto y la cantidad total de
sushi es divisible por 2:
{10}
{5, 10, 15}
Entre estos subconjuntos, el que contiene la mayor cantidad de sushi es {15, 20, 25}. Por lo tanto, la respuesta
es 3 3, ya que el primer plato de este subconjunto está en la posición 3 y se seleccionan 3 platos en total.
Torneo Chileno de Programación 2024
Problema C
Mineras
autor: Javier Reyes
Una minera realizó un estudio sobre la eficiencia de transporte entre puntos de interés y concluyó que
enfocarse en la eficiencia de transporte es clave para aumentar sus ganancias.
La red de transporte consta de n puntos de interés, conectados por m conexiones bidireccionales. El objetivo
es condensar esta red de tal manera que el transporte entre cualquier par de puntos de interés utilice a lo
más una conexión.
Para cumplir el objetivo solicitarán los servicios de Transporte Chileno Plus (TCP) que se dedica a condensar
redes de este tipo. Una condensación simple de TCP funciona de la siguiente manera:
1. Se determinan todos los pares de puntos de interés (u, v) tales que el menor número de conexiones a
usar para pasar de u a v es 2.
2. Por cada par (u, v) entregado por el punto anterior se agrega una conexión nueva entre u y v.
Un servicio de condensación se representa por un entero k que indica el número de veces que se debe aplicar
una condensación simple a una red, las cuales se aplican de forma secuencial.
El costo por un servicio de condensación k es k + 1 si en cada una de las condensaciones se agrega al menos
una conexión nueva y k en el caso contrario.
Debes escoger el parámetro k de servicio de condensación de tal manera que se cumpla el objetivo de que el
transporte para cada par de puntos de interés utilice a lo más una conexión y que el costo del servicio sea
óptimo.
Input
La primera lı́nea del input contiene dos enteros n, m (1 ≤ n ≤ 5 · 105 , 1 ≤ m ≤ 5 · 105 ), separados por un
espacio, representando el número de puntos de interés y el número de conexiones, respectivamente.
Las siguientes m lı́neas contienen dos enteros ai , bi (1 ≤ ai , bi ≤ n), separados por un espacio, correspon-
dientes a las conexiones.
Output
El output debe contener un único entero, el parámetro k del servicio de condensación a contratar. Si hay
varias soluciones, puedes escoger cualquiera de ellas.
Ejemplos
Nota
En el primer caso, en la primera operación se agrega una arista entre 1 y 3. Ninguna otra operación es
necesaria ası́ que indicar 1 a TCP implica un costo óptimo. Noten que indicar 2 también habrı́a implicado
un costo óptimo.
En el segundo caso, después de la primera operación se agregan aristas de tal forma que los únicos pares
de sitios no conectados directamente son (1, 4) y (4, 6). Una segunda operación es necesaria. Por lo tanto
indicar 2 o 3 implica un costo óptimo.
Torneo Chileno de Programación 2024
Problema D
Sudoku Malo
autor: Gabriel Carmona
Sudoku es un juego matemático que consiste en rellenar una cuadrı́cula de 9 × 9 casillas (81 casillas) dividida
en subcuadrı́culas de 3 × 3 con las cifras del 1 al 9 partiendo de algunos números ya dispuestos en algunas de
las celdas. La regla es que en cada fila, columna y subcuadrı́cula solo puede aparecer una vez cada número
del 1 al 9. Un Sudoku es considerado válido si es que cumple la regla anterior mencionada, en caso contrario
no es válido.
(a) Estado de Sudoku válido, en ninguna fila, (b) Estado de Sudoku inválido, en la fila 3 y en
columna o subcuadrı́cula se repite un número la subcuadrı́cula de arriba la izquierda se repite
del 1 al 9. el número 9.
Martı́n es un apasionado del Sudoku; juega dı́a y noche, sin descanso, toda la semana. En Pelotillehue, la
asociación de jugadores de Sudoku tiene un premio reservado para el mejor jugador.
Al enterarse del premio, Martı́n decide que debe ganarlo para honrar a su familia. Con determinación, envı́a
todos los Sudokus que ha resuelto, tanto los completos como los incompletos, a la asociación para demostrar
su habilidad y ası́ asegurarselo.
Pero cuando está a punto de enviar sus Sudokus, se da cuenta de que varios de ellos son inválidos. A punto
de desesperarse, Martı́n encuentra una solución rápida: para que sus Sudokus parezcan válidos reales, puede
intercambiar únicamente dos números de posición en una sola subcuadrı́cula de 3 × 3.
El problema es que Martı́n tiene poco tiempo para corregir sus Sudokus y hacer que todos sean válidos, por
lo que te pide ayuda.
Input
El input está compuesto por 9 lı́neas, cada una de ellas contiene 9 números separados por un espacio. Cada
número tendrá un valor entre 0 y 9. Si el valor es 0, entonces significa que en esa casilla no hay número.
Torneo Chileno de Programación 2024
Output
Si es posible obtener un estado válido de Sudoku intercambiando a lo más una vez dos números de una sola
subcuadrı́cula, imprime el estado válido obtenido siguiendo el mismo formato del input. Si hay más de una
solución, puedes imprimir cualquiera.
Ejemplos
Problema E
Ayuda el contest se está quemando
autor: Gabriel Carmona
El equipo de escritores del Torneo Chileno de Programación debe entregar su propuesta de problemas al
director, Cris Roz. Sin embargo, debido a retrasos, están preocupados por si su set de problemas está
adecuadamente balanceado.
Un set de problemas se considera balanceado si incluye al menos un problema para cada nivel de dificultad
esperado. Para facilitar las cosas debido al tiempo limitado, también se aceptará un set que cubra cada rango
de dificultad indicado, es decir, al menos un problema para cada rango de dificultad [x, y] donde y − x = 1.
Los escritores están muy ocupados preparando los casos de prueba y las soluciones, por lo que te piden que
los ayudes a determinar si el set de problemas propuesto está balanceado o no.
Input
La primera lı́nea del input contiene dos enteros p y r (1 ≤ p, r ≤ 10000), separados por un espacio, que
representan la cantidad de problemas y la cantidad de rangos de dificultad, respectivamente.
La segunda lı́nea contiene p enteros separados por un espacio, donde cada entero indica la dificultad de un
problema propuesto por los escritores. Las dificultades pueden tomar valores entre 1 y 10000.
Las siguientes r lı́neas contienen dos enteros x e y (1 ≤ x < y ≤ 10001), separados por un espacio, que
representan el comienzo (x) y el final (y) de un rango de dificultad, donde y − x = 1.
Output
El output debe contener la frase “Es balanceado!” si el set de problemas es balanceado, en caso contrario
debe contener “No es balanceado!”.
Ejemplos
Problema F
Qué elegancia la de Transilvania
autor: Javier Robledo
El Hotel Transilvania ha organizado una cena de etiqueta. Los invitados deben sentarse en una gran mesa
redonda siguiendo el protocolo francés, el cual establece que las parejas no se pueden sentar una al lado de
la otra y, para apoyar el intercambio cultural, se deben sentar monstruos y humanos de forma alternada. Un
humano o monstruo solo puede ser pareja con un humano o monstruo. Un humano o monstruo no puede ser
pareja de sı́ mismo.
Input
La primera lı́nea del input contiene un número positivo p (1 ≤ p ≤ 100) que corresponde a la cantidad
de parejas. Luego le siguen p lı́neas que representan las parejas, las cuales son representadas por strings
separados por un espacio.
Finalmente le siguen 2·p lı́neas que representan a cada invitado, los que se representan por un string indicando
su nombre seguido de un espacio y luego un caracter, el cual puede ser h si es humano o m si es monstruo.
Solo se han invitado parejas a la cena y cada invitado aparece en una sola pareja. Los nombres son de largo
máximo 30 y contienen solo letras del abecedario inglés en mayúscula o minúscula.
Output
El output corresponde a una lı́nea que representa el orden en el cual se sentarán los invitados considerando
las restricciones del protocolo francés. En esta lı́nea aparece el nombre de un invitado, luego un espacio,
seguido del siguiente invitado. Deben aparecer los 2 · p invitados.
Si es que no se puede lograr sentar a las parejas de tal forma que se cumpla la condición descrita en el
enunciado, imprime −1.
Ejemplos
Problema G
Problema de Emergencia
autor: Martı́n Andrighetti y Gabriel Carmona
Los organizadores del Torneo de Computación de Pelotillehue están desesperados por buscar un problema,
pero no se les ocurre nada hasta que un dı́a Martı́n ve a un niño dibujando polı́gonos regulares en un papel.
Martı́n, intrigado, se acerca y observa que no solo está dibujando polı́gonos regulares, sino que también está
trazando segmentos entre todos los pares de vértices del polı́gono. Ya sin aguantar la curiosidad, Martı́n le
pregunta por qué está haciendo ese tipo de dibujos. El niño le responde que su profesora de kinder les dijo
que tenı́an que averiguar cuántos pares de segmentos intersectan ortogonalmente.
Con mucha emoción Martı́n le dice al niño que salvó el TCP y corre a su casa para resolver ese problema.
Input
El input se compone de únicamente un entero n (3 ≤ n ≤ 106 ), correspondiente a la cantidad de lados que
tiene el polı́gono regular.
Output
El output debe contener un único entero, correspondiente al número de pares de segmentos que intersectan
ortogonalmente.
Ejemplos
Problema H
Otro problema de camino más corto
autor: Javier Oliva
Sofı́a está jugando su videojuego de rol favorito, llamado Troll & Cave Patrol (TCP). En este juego se
te entrega un mapa que consiste de una secuencia de triángulos t0 , t1 , ..., tn−1 que satisface las siguientes
restricciones:
La secuencia de triángulos se entrega como una secuencia de 3n vértices a coordenadas enteras v0 , v1 , ..., v3n−1 .
El triángulo ti tiene como vértices los vértices v3i , v3i+1 , v3i+2 . Además, se asegura que v0 y v3n−1 son únicos
en la secuencia de puntos.
Sofı́a debe viajar desde v0 hasta v3n−1 y debe hacerlo siguiendo el camino más corto posible. Además, Sofı́a
solo puede moverse por los bordes o interior de los triángulos.
Figura 2: El camino más corto desde el primer vértice A al último vértice G es el camino azul.
Input
La primera lı́nea del input contiene un único entero n (2 ≤ n ≤ 5 · 105 ), indicando el número de triángulos.
Torneo Chileno de Programación 2024
Luego vienen 3·n lı́neas donde la i−ésima de éstas contiene dos enteros xi , yi (−109 ≤ xi , yi ≤ 109 ), separados
por un espacio, representando las coordenadas del vértice vi−1 .
Output
El output debe contener el camino representado como una secuencia de puntos a coordenadas enteras
p1 , p2 , . . . , pk tal que el camino corresponde a la unión de los segmentos [pi , pi+1 ] para 1 ≤ i < k y p1 = v0 .
Se debe entregar un punto por lı́nea con coordenadas separadas por un espacio. Además, no deben haber
tres puntos consecutivos colineales.
Se puede demostrar que existe un camino óptimo que corresponde a la unión de una cantidad finita de
segmentos definidos por dos puntos a coordenadas enteras.
Ejemplos
Problema I
Un juego extraño
autor: Javier Oliva
El jugador que no pueda jugar pierde. Si Javier empieza el juego, ¿quién ganará si ambos juegan de forma
óptima?
(*) El conjunto de ancestros de un nodo i corresponde al conjunto de todos los nodos que se encuentran en
el camino único entre i y 1, excluyendo al nodo i.
Input
La primera lı́nea del input contiene un entero n (1 ≤ n ≤ 106 ), correspondiente al número de nodos del
árbol.
Luego vienen n − 1 lı́neas donde la i-ésima contiene dos enteros ai , bi (1 ≤ ai , bi ≤ n) indicando que los
nodos ai y bi están conectados por una arista.
Output
Debes imprimir “Javier” si Javier ganará o “Gabriel” si Gabriel ganará.
Ejemplos
Nota
En el ejemplo gana Javier sacando la ficha del nodo 1, luego Gabriel solo puede jugar sacando una ficha del
nodo 2 y no puede hacer nada más, finalmente Javier saca la última ficha y gana.
Torneo Chileno de Programación 2024
Problema J
El Dado Que Rueda™
autor: Martı́n Muñoz
Hace dos meses comenzaste tu doctorado en la Universidad de Polandia y todo lo que has hecho es leer
papers y dormir. ¡Oh no!
Para superar este tedio infinito decidiste visitar el Club de Juegos de Mesa de Polandia con la idea de hacer
algo distinto un dı́a a la semana. No fue grata tu sorpresa que en este Club solo juegan un juego que se llama
El Dado Que Rueda™, y es el juego más simple que has visto en la vida. Pero como estás tan desesperado
por tener un panorama sonrı́es y les permites que te expliquen su pavada de juego.
El juego comienza en un tablero con forma de plano cartesiano infinito, y tu oponente te entrega dos valores
a y b. Tu objetivo es tomar El Dado™, colocarlo en la coordenada (0, 0) y hacerlo llegar a la coordenada
(a, b) gastando la menor cantidad de puntos. Este dado es un cubo de dimensiones 1 × 1 × 1 donde cada cara
tiene un valor que puede ser 1 o 2. Los valores que están adelante, atrás, a la izquierda y a la derecha en el
dado son todos 1, y los valores que están arriba y abajo son 2.
Figura 3: El Dado™
Poner el dado en el tablero toma tantos puntos como el valor en la cara que toca el tablero; tú dedides en
qué orientación colocarlo. Mover el dado solo se puede hacer volteándolo en las cuatro direcciones paralelas
a los ejes x o y. Es decir, si el dado está en la coordenada (x, y), lo puedes voltear hacia las coordenadas
(x + 1, y),(x − 1, y), (x, y + 1) y (x, y − 1). Al voltearlo una nueva cara toca el tablero, y esta movida cuesta
tantos puntos como el valor que está en esta cara.
La figura de abajo muestra una forma óptima de partir en (0, 0) y llegar a (2, 1), que cuesta 5 puntos.
Tú has jugado El Dado que Rueda™ un par de horas ya, y ya sabes cómo obtener el puntaje perfecto para
cada posición. El Club de Juegos de Mesa de Polandia quiere entrenar dentro de la semana para tratar de
ganarte en la próxima junta, ası́ que les vas a entregar un programa al que ellos pueden ingresar un par de
números a y b, y entregue la mı́nima cantidad de puntos que se pueden gastar para hacer llegar El Dado™ a
la coordenada (a, b).
Torneo Chileno de Programación 2024
Input
El input contiene únicamente dos enteros separados por un espacio, correspondiente a los valores a y b
(0 ≤ a, b ≤ 108 ).
Output
Imprimir un único entero, indicando el costo mı́nimo de hacer llegar el dado a la coordenada (a, b).
Ejemplos
Problema K
Problema constructivo choro
autor: Martı́n Muñoz
Eres el diseñador principal de una prestigiosa competencia, y tu tarea es definir las rutas que los equipos
deben seguir desde el inicio hasta la gran final. En esta competencia, los equipos se mueven a través de
una red de n nodos empezando del nodo 1, el equipo ganador es aquel que llega al nodo n primero. Sin
embargo, como requerimiento especial, las rutas deben ser cuidadosamente planificadas para garantizar que
haya exactamente k caminos diferentes entre el punto de inicio y la meta.
Tu misión es diseñar un mapa de rutas que cumpla con esta condición. Pero hay un lı́mite: no puedes usar más
de 100 nodos para representar todas las rondas y enfrentamientos, y las rutas deben estar bien organizadas
para que los equipos siempre avancen hacia la final, sin posibilidad de retroceder o quedar atrapados en
ciclos.
Input
El input contiene únicamente el entero k (1 ≤ k ≤ 109 ).
Output
El output debe contener una posible red para la competencia con el siguiente formato:
Imprime una lı́nea con dos enteros n, m (n ≤ 100), separados por un espacio, que representan la
cantidad de nodos y aristas en el grafo.
Luego imprime m lı́neas con números u, v (1 ≤ u, v ≤ n), separados por un espacio, para decir que hay
una arista de u a v en el grafo. El grafo tiene que ser simple (cada arista no puede aparecer más de
una vez) y tener exactamenente k caminos distintos desde el nodo 1 hasta el nodo n.
Ejemplos
Problema L
UF
autor: Javier Marinkovic
Martı́n, tras ahorrar por 40 años y vender dos riñones, por fin tiene suficiente dinero ahorrado para poner
el pie de un crédito hipotecario para comprar un estudio. Obtuvo un crédito flexible, que le permite pagar
cuanto quiera cada mes. Martı́n ya tiene planeado cuánto pagará en pesos para los siguientes N meses,
apuntando a pagar toda su deuda, pero se olvidó de un detalle importante: ¡En Chile los créditos se adeudan
en UF, no en pesos!
Martı́n debe un monto de M UFs, a una tasa de interés compuesto del t %. Es decir, que si al comienzo
de un mes Martı́n adeuda x, al final de ese mismo mes adeudarı́a (1 + t/100) · x. Si Martı́n adicionalmente
decide pagar un monto de p UFs en ese mes, terminarı́a el mes con una deuda de (1 + t/100) · x − p.
Martı́n se intranquiliza, pues si bien entiende cómo funciona el proceso de pago con los montos en UF, su
plan de pago está en pesos. Martı́n revisa el valor de la UF en pesos mes a mes, pero como no es muy hábil
con las matemáticas, no sabe bien cómo calcular cómo se refleja su pago en pesos en el monto adeudado en
UF cada mes. ¿Puedes ayudarlo a diseñar un programa que pueda hacer los cálculos por él, y que determine
si termina de pagar su estudio al final del plazo de N meses?
Input
La primera lı́nea del input contiene tres valores separados por un espacio: N (1 ≤ N ≤ 360), M (1 ≤ M ≤ 104 )
y t(0,0 ≤ t ≤ 20,0); que representan el plazo del crédito en meses, el monto adeudado en UF inicialmente y
la tasa de interés, respectivamente.
A continuación, vienen N lı́neas donde la i−ésima contiene dos valores, separados por un espacio, pi (0 ≤
pi ≤ 106 ) y U Fi (103 ≤ U Fi ≤ 105 ), que representan el monto pagado por Martı́n y el valor de la UF en el
mes i, respectivamente.
Output
El output debe contener como respuesta la palabra “Si” en el caso de que Martı́n logre pagar su estudio en
N meses, y “No” de caso contrario. Podrás considerar que Martı́n logró pagar la deuda si es que el monto
adeudado por Martı́n es ≤ 0,01 UFs.
Ejemplos
Nota
Podrı́a ser el caso de que Martı́n no se de cuenta de cuándo termine de pagar la deuda, y siga pagando. En
ese caso puedes pensar que los pagos “rebotan”, y la deuda no se vuelve negativa.
Torneo Chileno de Programación 2024
Problema M
Problema de backtracking????
autor: Martı́n Muñoz y Bernardo Subercaseaux
El problema se supone que era un ejercicio clásico de backtracking y todo funciona bien.
Lamentablemente, cuando el profesor Parceló quiso usar este mismo problema para su curso, se dio cuenta
que habı́a transcrito mal el enunciado. Habı́a cambiado los lı́mites de 10 a 100, y la permutación ya no es de
0 a 9 sino que de 0 a 99.
Parceló se dio cuenta de su error y quiso avisarle a sus alumnos que el problema no era ası́ y que lo lamentaba
mucho. Justo antes de mandar su correo su alumna Alejandra le habló diciéndole “Hola profesor, gracias
por el problema, estuvo difı́cil pero entretenido.” y el mensaje tenı́a un pantallazo de un envı́o que decı́a
Accepted.
Nuestro profesor Parceló no sabe qué hacer. Para él, el problema era imposible, y ya no puede decirle a su
curso que el problema no se podı́a hacer–habı́a una alumna que lo habı́a resuelto. ¿Puedes resolverlo por él?
(*) Un arreglo (en particular, una permutación) A = [a1 , . . . , an ] es lexicográficamente menor a otro arreglo
B = [b1 , . . . , bn ] si es que existe un i ∈ [1, n] tal que ai < bi y para cada j < i se cumple que aj = bj . Por
ejemplo, la permutación [0, 2, 1, 3] es lexicográficamente menor a [0, 2, 3, 1].
Input
El input consiste de una lı́nea con los 100 valores a0 , . . . , a99 (1 ≤ ai ≤ 109 ), separados por un espacio, y una
segunda lı́nea con el número k (1 ≤ k ≤ 109 ).
Output
Imprime la permutación p0 , . . . , p99 de los valores 0 al 99 lexicográficamente menor que cumpla con p0 · a0 +
· · · + p99 · a99 ≤ k, cada número debe estar separado por un espacio. Si no existe, imprime -1.
Ejemplos
Nota
En los ejemplos se muestran los 100 valores en varias lı́neas debido a la cantidad de números. El formato
correspondiente se describe en las sección del input y output.
Torneo Chileno de Programación 2024
Problema N
Desempate TCP
autor: Roberto Ası́n-Achá
La ceremonia de premiación del Torneo Chileno de Programación (TCP) no podrı́a haber terminado de forma
más espectacular. La Universidad Teórica Computina de Pelotillehue (TCP1) y la Universidad del Trabajo
Constante de Pueblo Lavanda (TCP2) han empatado con 10 problemas resueltos y un tiempo acumulado de
800 segundos. Este inédito hecho llevó a los organizadores a consultar a los equipos si querı́an compartir la
gloria o buscar una forma de desempate. Al igual que en el evento de salto alto de las Olimpiadas de Parı́s
2024, los equipos decidieron no compartir la gloria. Ası́, los organizadores definieron un singular método de
desempate. A la mañana siguiente, los dos equipos deberán dirimir al campeón de la competencia en un
singular juego.
El juego funciona de la siguiente manera. Cada equipo tendrá frente a si mismo, a 100 metros de distancia,
N láminas de cartón desplegadas en forma horizontal, de izquierda a derecha, dadas vuelta. Cada lámina
contiene, en el lado no visible, un número entero. Adicionalmente, se desplegará en una pantalla gigante
un único número entero obj que será de referencia para ambos equipos. Por turnos, cada participante del
equipo correrá los 100 metros, tomará la lámina más a la izquierda y volverá con sus compañeras(os). Con
las láminas recolectadas, todo el equipo decidirá si es posible, mediante sumas de los números recolectados,
igualar a obj. En dicho caso, el equipo deberá correr a la pantalla (a 200 metros de cada equipo) y levantar
los brazos.
Como la velocidad de cada concursante es conocida y la pereza la mañana después de una cena de premiación
es infinita, los equipos han acordado aceptar el desenlace simulando el juego.
Input
El input consiste en 5 lı́neas. La primera lı́nea contiene dos números enteros positivos N (1 ≤ N ≤ 1000) y
obj (1 ≤ obj ≤ 10000).
La segunda lı́nea contiene N números enteros positivos ai (1 ≤ ai ≤ 10000), separados por espacios en blanco,
que corresponden a las láminas de izquierda a derecha colocadas para la Universidad Teórica Computina de
Pelotillehue.
La tercera lı́nea contiene contiene N números enteros positivos bi (1 ≤ bi ≤ 10000), separados por espacios
en blanco, que corresponden a las láminas de izquierda a derecha colocadas para la Universidad del Trabajo
Constante de Pueblo Lavanda.
La cuarta lı́nea contiene 3 valores enteros positivos p1 , p2 y p3 (1 ≤ pi ≤ 100), separados por un espacio,
representando el tiempo, en segundos, que cada participante del equipo TCP1 tarda en correr los 100 metros,
en el orden definido por el equipo para realizar los relevos.
Finalmente, la quinta lı́nea contiene 3 valores enteros positivos q1 , q2 y q3 (1 ≤ qi ≤ 100), separados por un
espacio, representando el tiempo, en segundos, que cada participante del equipo TCP2 tarda en correr los
100 metros, en el orden definido por el equipo para realizar los relevos.
Torneo Chileno de Programación 2024
Output
El output corresponde a una lı́nea conteniendo “Universidad Teorica Computina de Pelotillehue”, o “Uni-
versidad del Trabajo Constante de Pueblo Lavanda”, dependiendo de qué equipo sea el ganador del TCP.
En el improbable caso de que se vuelva a dar un empate, la salida será una lı́nea conteniendo “Vuelvan a
correr”.
Ejemplos