Cuaderno de Problemas
Informaci
on General
Este cuaderno contiene 11 problemas; las paginas estan numeradas de 1 a 15, sin contar esta pagina de portada.
Verifica que tu cuaderno este completo.
A) Sobre la entrada
1) La entrada de tu programa debe ser leda desde entrada est andar.
2) La entrada est a compuesta de un u nico caso de prueba, descrito en un numero de lneas que depende del
problema.
3) Quando una lnea de entrada contiene varios valores, estos son separados por un u
nico espacio en blanco; la
entrada no contiene ning un espacio en blanco adicional.
4) Cada lnea, incluyendo la u
ltima, contiene el caracter final-de-lnea.
5) El final de la entrada coincide con el final de archivo.
B) Sobre la salida
1) La salida de su programa debe ser escrita en salida estandar.
2) Cuando una lnea de salida contiene varios valores, estos deben separarse por un u
nico espacio en blanco; la
salida no debe conter ningun outro espacio en branco.
3) Cada lnea, incluyendo la u
ltima, debe contener el caracter final-de-lnea.
Batalla de Programadores ITESO ACM ICPC 2014 1
Problema A
Vuelta
Archivo: volta.[c|cpp|java]
En los deportes de motocicleta es muy com un que el piloto lder en una carrera, en alg
un momento,
rebase al ultimo piloto. El lder, en este momento lleva una vuelta mas que el u ltimo piloto, quien se
vuelve rezagado. En esta tarea, dado el tiempo que le lleva al piloto mas rapido, y al piloto m as lento,
completar una vuelta, debes determinar en cual vuelta el piloto mas lento se rezaga. Debes considerar
que, al inicio, ambos est an lado a lado en la lnea de inicio del circuito al empezar la vuelta n umero
1 (la primera vuelta de la carrera); ademas que la siguiente vuelta comienza justo despues de que el
lder cruza la lnea de inicio.
Entrada
La entrada consiste en dos enteros X y Y (1 X < Y 10000), los tiempos, en segundos, que le
toma al piloto m
as r
apido y al piloto mas lento, respectivamente, completar una vuelta.
Salida
Tu programa debe de mostrar un entero: la vuelta en el que el piloto mas lento es rezagado.
Ejemplos
Entrada Salida
1 10 2
Entrada Salida
4 8 2
Entrada Salida
5 7 4
Entrada Salida
6875 7109 31
Batalla de Programadores ITESO ACM ICPC 2014 2
Problema B
Bajaja barajeada
Archivo: baralho.[c|cpp|java]
Un paquete de barajas contiene un n umero par 2n de cartas a1 , a2 , . . . , a2n , todas diferentes (a1 <
a2 < < a2n ). El paquete inicialmente esta ordenado, esto quiere decir que la primera carta en el
paquete es a1 , la segunda es a2 , y as sucesivamente, as la u
ltima carta del paquete es a2n .
El repartidor entonces realiza el procedimiento de barajeo repetidamente. El barajeo consiste en
dos pasos:
2. las cartas en las dos mitades son intercaladas de manera que la secuencia original al inicio de
paso 1 es x1 , x2 , . . . , x2n , y al final del paso 2 la secuencia final es xn+1 , x1 , xn+2 , x2 , . . . , x2n , xn .
Dado el numero de cartas en el paquete, escribe un programa que determine cuantas veces debe
de realizarse el procedimiento de barajeo para que el paquete vuelva a estar ordenado.
Entrada
nica lnea de entrada contiene un entero par p (2 p 2 105 ), donde p es el n
La u umero de cartas
en el paquete (nota que el valor p corresponde al valor 2n en la descripcion anterior).
Salida
Tu programa debe producir una u nica lnea, conteniendo un entero, el n
umero mnimo de veces que
debe realizarse el barajeo para que el paquete quede ordenado nuevamente.
Ejemplos
Entrada Salida
4 4
Entrada Salida
6 3
Entrada Salida
2 2
Entrada Salida
100002 100002
Batalla de Programadores ITESO ACM ICPC 2014 3
Problema C
Confederacion
Archivo: confederacao.[c|cpp|java]
Entrada Salida
2 5 3
1 0 0 1
2 0 0 8
0 1 0
2 2 2
3 3 3
5 5 5
2 18 4
Batalla de Programadores ITESO ACM ICPC 2014 4
Entrada Salida
4 8 5
0 0 1 1
1 0 1 2
-1 1 1 3
-1 -1 1 3
0 0 5
0 0 4
0 0 -2
1 0 5
40 19 104
13 26 84
89 -45 18
3 1 0
Batalla de Programadores ITESO ACM ICPC 2014 5
Problema D
Senorita Lombriz
Archivo: minhoca.[c|cpp|java]
Se
norita Lombriz se enoja cuando oye a la gente decir que las lombrices son animales palndromos,
ya que no podemos distinguir la cabeza de la cola. Esa es una gran mentira!
Se
norita Lombriz vive en una bonita cueva, compuesta por camaras y t uneles. Cada tunel conecta
dos diferente c amaras y pueden usarse en ambos sentidos. Un ciclo en la cueva es una secuencia de
camaras s1 , s2 , . . . , sn , sn+1 = s1 , donde si 6= si+1 y (si , si+1 ) es un t
unel para 1 i n. La cueva
de la Se
norita Lombriz puede tener ciclos pero cada camara es parte solamente un ciclo. Los t uneles
y camaras son estrechas, as que si el cuerpo de la Se norita Lombriz esta ocupando un t unel o una
camara, no hay espacio para que la Se norita Lombriz vuelva a entrar al t unel o a la camara.
Algunas c amaras de la cueva tienen acceso desde la superficie. Se norita Lombriz tiene un mapa que
describe la cueva, informando la longitud de cada t ubel y los pares de camaras que estan conectadas
por un tanel. Se norita Lombriz tambien es consciente y conoce su longitud exacta.
Se
norita Lombriz quiere saber, de las camaras que tienen acceso a la superficie, si es posible entrar
a la cueva por esa c amara, caminar la distancia m unima dentro de la cueva y dejar la cueva por la
misma camara, movindose siempre hacia adelante, nunca para atras. Ay udala a resolver su problema!
Entrada
La primera lnea contiene dos enteros S (2 S 104 ) y T (1 T 2S) representando el n umero
de camaras y el n umero de tuneles en la cueva, respectivamente. Las camaras estan identificadas por
enteros desde 1 hasta S. Cada de los siguientes T lneas describen el t unel y contiene tres enteros
A, B, y C (1 A < B S; 1 C 100), donde A y B representan las camaras conectadas por el
t
unel y C representa la longitud del t unel. Ninguna camara esta conectada a mas de 100 camaras. La
siguiente lnea contiene un entero Q (1 Q 100), que indica el n umero de pruebas. Cada una de
las siguientes Q lneas describe una prueba y contiene dos entros X (1 X S) y M (1 M 105 ),
indicando la c amara que Se norita Lombriz quiere usar para entrar a la cueva y la longitud del cuerpo
de Senorita Lombriz, respectivamente. e
Salida
Cada prueba en la entrada de tu programa debe de producir una lmea que contenga un entero, la
longitud del camino m as corto que Se
norita Lombriz debe recorrer para entrar y salir de la cueva por
la camara indicada en la prueba, moviendose siempre para adelante, nunca para atras. Si no es posible
la lmea debe de contener el valor 1.
Batalla de Programadores ITESO ACM ICPC 2014 6
Ejemplos
Entrada Salida
4 4 47
1 2 12 23
2 3 10 -1
3 4 8
2 4 5
3
1 23
4 10
1 24
Entrada Salida
8 9 20
1 2 1 -1
2 3 1 16
3 4 1 71
2 5 10
5 6 25
2 6 20
3 7 9
7 8 3
3 8 4
4
1 10
4 60
8 5
7 55
Batalla de Programadores ITESO ACM ICPC 2014 7
Problema E
Ecologia
Archivo: ecologia.[c|cpp|java]
El reino de Polinomigonia recientemente aprobo una ley ecologica que obliga a todos los granjeros
en el reino a preservar el n
umero m aximo de arboles posibles en un un porcentaje fijo del area de la
granja. Adem as, para permitir a los animales salvajes moverse libremente, el area preservada debe de
estar conectada.
Todas las granjas en Polinomigonia son una cuadricula de N N cu- 31 12 7 1 14
adrados, de una hect area cada uno. La figura ilustra una granja de
N = 5. El area preservada debe cubrir exactamente M cuadrados. En 23 98 3 87 1
el ejemplo, M = 6. Estos cuadrados deben de estar conectados or- 5 31 8 2 99
togonalmente. Quiere decir que, debe ser posible desplazase entre dos
12 3 42 17 88
cuadrados preservados haciendo movimientos ortogonales entre ellos. El
area no preservada puede o no estar conectada. 120 2 7 5 7
Los granjeros conocen el numero de arboles dentro de cada cuadrado, y t
u debes de escribir un
programa que calcule el numero m aximo de arboles que pueden ser preservados en una area de M
cuadrados. En el ejemplo, es posible preservar 377 arboles!
Entrada
La primera lnea de entrada contiene dos enteros N y M (2 N 50, 1 M 10). Las siguientes
N lneas contiene, cada una, N enteros con valores entre 1 y 1000, representando el n
umero de erboles
en cada cuadrado en la granja.
Salida
Tu programa debe de mostrar una linea conteniendo un entero, el n
umero maximo de arboles que
pueden ser preservados, con las restricciones dadas.
Ejemplos
Entrada Salida
5 6 377
31 12 7 1 14
23 98 3 87 1
5 31 8 2 99
12 3 42 17 88
120 2 7 5 7
Entrada Salida
4 8 72
1 1 1 1
9 9 9 1
9 1 9 1
9 9 9 1
Batalla de Programadores ITESO ACM ICPC 2014 8
Problema F
Teletransporte
Archivo: teletransporte.[c|cpp|java]
1 2 2 2 2 1 3 2 2 2 3 1
A B C D A B C D A B C D
Tu tarea en este problema es, dada la aeronave de inicio S, la aeronave destino T , y el numero
de viajes L de un boleto, determinar el n
umero de diferentes secuencias de L botones que llevar
an al
usuario de la aeronave S a la aeronave T . Por ejemplo, usando las aeronaves de la figura anterior,
hay cuatro diferentes secuencias de L = 2 botones que llevaran al usuario de la aeronave S = 3 a la
aeronave T = 1: CD, DA, AB, y BB.
Entrada
La primera lnea de entrada contiene dos enteros N (1 N 100) y L (0 L < 230 ), indicando el
numero de aeronaves y el n umero de viajes disponibles en el boleto respectivamente. La segunda lnea
de entrada contiene dos enteros S y T (1 S, T N ), indicando la aeronave de inicio y la aeronave
de destino respectivamente. Cada una de las siguientes N lneas describen el panel de la cabina de la
aeronave. La i-nesima lnea (1 i N ) contiene cuatro enteros A, B, C and D (1 A, B, C, D N ),
que representan los numeros contenidos en los cuatros botones en la cabina de teletrasnportaci on de
la aeronave numero i.
Salida
Tu programa debe producir una sola lnea, que contenga un entero, que debe ser igual a r m odulo
104 , donde r es el n
umero de secuencias diferentes de L botones necesarios para llevar al usuario de la
aeronave S a la aeronave T .
Batalla de Programadores ITESO ACM ICPC 2014 9
Ejemplos
Entrada Salida
2 20 7776
1 1
2 2 2 2
1 1 1 1
Entrada Salida
2 29 0
1 1
2 2 2 2
1 1 1 1
Entrada Salida
2 0 1
1 1
2 2 2 2
1 1 1 1
Entrada Salida
2 0 0
1 2
2 2 2 2
1 1 1 1
Entrada Salida
3 2 4
3 1
1 2 2 2
2 1 3 2
2 2 3 1
Batalla de Programadores ITESO ACM ICPC 2014 10
Problema G
Letras
Archivo: letras.[c|cpp|java]
DdaAaA D.....
CBAcca C.....
eEaeeE e.....
bBbabB b.bab.
DbDdDc DbD.D.
fFaAaC ....aC
Tu programa debe de ayudar a la gente de Ciudad de la Logica a encontrar la longitud del camino
consistente m as corto entre el cuadrado con coordenadas (1, 1), en la esquina superior izquierda, y
el cuadrado con coordenadas (N, N ), en la esquina inferior derecha. Para el parque en el ejemplo
anterior, el camino consistente m as corto tiene longitud de 13.
Entrada
La primera lnea de entrada con un entero N (2 N 100), el tama no el parque. Las siguiente N
lneas contiene, cada una, la secuencia de N letras, describiendo el parque.
Salida
Tu programa debe mostrar una lnea que contenga un entero, la longitud del camino consistente m as
corto. Si no hay un camino consistente, la salida debe de ser -1.
Your program must output one line containing one integer, the length of a shortest consistent path.
If there is no consistent path, output -1.
Ejemplos
Entrada Salida
6 13
DdaAaA
CBAcca
eEaeeE
bBbabB
DbDdDc
fFaAaC
Batalla de Programadores ITESO ACM ICPC 2014 11
Entrada Salida
7 -1
aAaaaaa
aAaaaAa
aAaaaAA
aaAaAaa
AaAaaAa
aaAAaAa
aaaaaAa
Batalla de Programadores ITESO ACM ICPC 2014 12
Problema H
Balonmano
Archivo: handebol.[c|cpp|java]
Entrada Salida
5 3 0
0 0 0
1 0 5
0 0 0
0 1 2
1 1 0
Entrada Salida
12 5 2
4 4 2 3 7
0 0 0 1 0
7 4 7 0 6
1 2 3 3 2
0 0 0 0 0
4 0 9 10 10
0 1 0 0 0
1 2 0 2 3
10 10 10 1 0
0 3 3 3 4
10 10 0 10 10
1 1 2 0 9
Batalla de Programadores ITESO ACM ICPC 2014 13
Problema I
RSA
Archivo: rsa.[c|cpp|java]
RSA es uno de los algoritmos criptograficos mas usados y es considerado como una de las alterna-
tivas mas seguras. Su operacion basica se describe a continuacion.
Se escogen dos numeros primos p y q y se calcula n = pq. Luego se calcula la funcion indicatriz
(n) = (p 1)(q 1) y se escoge un n umero entero e que satisface 1 < e < (n) de manera que
gcd((n), e) = 1. Finalmente, se calcula el entero d, el inverso multiplicativo de e modulo (n), es
decir, el entero d que satisface de 1 mod (n).
De esa manera se obtiene la llave p
ublica, que consiste en el par de enteros n y e, y la llave secreta,
que contiene los enteros n y d.
Para cifrar el mensaje m, con 0 < m < n, calculamos c = me mod n, y c es el mensaje cifrado.
Para descifrar un mensaje, es decir, para recuperar el mensaje original, es suficiente calcular m = cd
mod n. Nota que, para poder hacer el calculo, debes conocer la llave secreta; no es suficiente conocer
la llave p
ublica para descifrar el mensaje.
En este problema, tu tarea es romper la criptografa RSA.
Entrada
La unica lnea de entrada contiene tres enteros, n, e, y c, donde n, e, and c, where 15 n 109 ,
1 e < n y 1 c < n, tal que n y e forma la llave RSA p ublica descrita arriba, y c es el mensaje
cifrado con esa llave p
ublica.
Salida
Tu programa debe producir una sola lnea, con un entero m, 1 m < n, el mensaje original.
Ejemplos
Entrada Salida
Entrada Salida
91 43 19 33
Batalla de Programadores ITESO ACM ICPC 2014 14
Problema J
Corte
Archivo: corte.[c|cpp|java]
Entrada
La primera lnea de entrada contiene un entero N (2 N 100). Las siguientes 2N lneas contiene,
cada una, dos numeros reales X y Y (0 X, Y 10000), con precision de 4 decimales: las coordenadas
de los 2N puntos, en sentido contrario al reloj, del polgono convexo.
Salida
Tu programa debe sacar una lnea conteniendo un n umero real, con precision de 4 decimales. El
n
umero debe de ser el peso de la descomposicion con menor peso del polgono descrito.
Ejemplos
Entrada Salida
4 4519.6176
5715.7584 3278.6962
3870.5535 4086.7950
3823.2104 4080.7543
3574.4323 170.2905
4521.4796 144.9156
4984.6486 306.2896
5063.1061 347.1661
6099.9959 2095.9358
Entrada Salida
2 0.0000
6044.4737 2567.9978
5752.5635 3226.5140
5148.8242 3802.9292
4598.8042 4036.8000
Batalla de Programadores ITESO ACM ICPC 2014 15
Problema K
Pizza del Abuelo Pepe
Archivo: pizza.[c|cpp|java]
El Abuelo Pepe es famoso por sus pizzas. Son deliciosas y tienen la forma circular perfecta. El
Abuelo prepar o una pizza especial para la cena de hoy, y puso cierto n umero de olivas distribuidas al
azar en la pizza, pero todas exactamente en el borde de la pizza.
Tu problema es determinar, conociendo la circunferencia de la pizza, el n umero de olivas y la
posicion de cada una de las olivas, si es posible dividir la pizza en sectores circulares de exactamente
el mismo taja no, de tal manera que cada pedazo tenga una oliva.
La siguiente figura (a) muestra una pizza de circunferencia 12 con 3 olivas y una posible divisi on
en pedazos iguales: la figura (b) muestra una pizza con circunferencia 12 con 4 olivas que no puede
dividirse en pedazos iguales como se describio anteriormente. A pesar de ser deliciosas, las olivas son
muy peque nas, y su dimensi
on puede ser descartada cuando se calcula la division.
0 0
11 1 11 1
10 2 10 2
9 3 9 3
8 4 8 4
7 5 7 5
6 6
(a) (b)
Entrada
La primera lnea contiene dos enteros C (3 C 105 ) y N (3 N 104 , N C) indicando la
circunferencia de la pizza y el n
umero de olivas, respectivamente. El entero C es multiplo de N . La
segunda linea contiene N diferentes enteros Xi (0 X1 < X2 < . . . < XN < C), en orden creciente,
describiendo las posiciones de las olivas, dado como la longitud del arco circular, en sentido de las
manecillas del reloj, desde un punto fijo en la circunferencia.
Salida
Tu programa debe producir una sola lnea, contiendo una letra, que debe de ser S si es posible dividir
la pizza como se describe arriba, o N en otro caso.
Ejemplos
Entrada Salida
12 3 S
2 8 11
Entrada Salida
12 4 N
4 5 7 11