Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
http://olimpiada.icpc-bolivia.edu.bo olimpiada@icpc-bolivia.edu.bo
Solucionario 2011 - 2012 de las Pruebas Distritales, Departamentales y Final Nacional. Indice
Buscando el Diez El Resto M ultiplos Rect angulo mas grande Carga Cajas Sumando Digitos Acuario Gusanillo Apariencia triangular Votaci on Apostando 1 3 6 8 10 12 14 17 19 21 24
www.icpc-bolivia.edu.bo
Estrategia para apostar Promedios M oviles Conservaci on M ultiplo Peque no Siempre Solo La nueva pieza de ajedrez Cuando Ver Pel culas Soluciones Cambio Hora Desbloqueando Bloqueos Codigo de Vericaci on Trinomios Triangulares Calculadora Inca Palindromes Juego de Canguros Cordillera Eratostenes Examen Quimica cajas Codigo USSD Collar Palindrome
27 29 32 34 36 38 42 44 48 49 50 52 54 56 58 60 63 65 67 69 71 73
www.icpc-bolivia.edu.bo
Nidito Tetris Aritm etica Maya N umero de la suerte El dulce M agico Suma de Primos Edad de los Hijos Distancia de Hamming Hallando n umeros capic uas Poema La u ltima esperanza Bolivia Word La gran bomba de explosi on extra na de destrucci on masiva Z Angulos Flecha m as Larga Las paginas est an numeradas desde el 1 al 115.
22 de agosto de 2012
www.icpc-bolivia.edu.bo
Entrada
La entrada esta en una l nea que contiene todas las notas que obtuvo separadas por una coma.
Salida
Escriba en una l nea el n umero de tareas que requiere para obtener un 10.
Ejemplos de entrada
9, 10, 10, 9 8, 9 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 10, 10, 10, 10
Ejemplos de salida
0 4 247 0
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 7, 7, 10, 10, 4, 6, 4, 6, 0, 6, 7, 4, 6, 6, 9 La respuesta que debes entregar es: 101
www.icpc-bolivia.edu.bo
An alisis y Soluci on
Para resolver este problema solo debe hallar cuantos 10 requiere para obtener el promedio deseado. El detalle esta en el c odigo
www.icpc-bolivia.edu.bo
Problema - El Resto
El peque no Arturo adora los n umeros y el 9 es su n umero favorito. Cuando encuentra un n umero siempre calcula el residuo despu es de dividir por 9. Este es su n umero de la suerte. Esta vez le dieron un n umero X con una longitud N que no contiene ceros. Se le pide hallar el residuo de la divisi on por 9 de superSuma(X ). Se dene super(X ) como sigue: Dado un conjunto de S con posiciones de d gitos en X borramos d gitos en estas posiciones para obtener un sub numero. La superSuma(X ) es la suma de todos los sub numeros. Por ejemplo si X = 123 entonces superSuma(X ) = 123 + 12 + 13 + 23 + 1 + 2 + 3 = 177. Calcular mentalmente el residuo de dividir por 9 de la superSuma(X ) no le resulta f acil a Arturo por lo que tu tarea es ayudarle a resolver este problema.
Entrada
Cada l nea contiene una cadena con los d gitos de X .
Salida
Escriba el resto de dividir la superSuma(X ) por 9. Ejemplos de entrada 123 8 11235813213455 Ejemplos de salida 6 8 7
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 24816
An alisis y Soluci on
Veamos el ejemplo: Super(123) = 123 + 12 + 13 + 23 + 1 + 2 + 3 = 177
www.icpc-bolivia.edu.bo
Lo que deseamos hallar es: Super(123) = 123 + 12 + 13 + 23 + 1 + 2 + 3 = 177 %9 Por las leyes de la aritm etica = (123 %9) + (12 %9) + (13 %9) + (23 %9) + (1 %9) + (2 %9) + (3 %9) Como se utilizan los mismos d gitos en cada operando podemos separar los mismos para ver que: 123 = 1 * 100 + 2 * 10 + 3 * 1 12 = 1 * 10 + 2 * 1 13 = 1 * 10 + 3 * 1 23 = 2 * 10 + 3 * 1 1 = 1 * 1 2 = 2 * 1 3 = 3 * 1 Veamos la siguiente propiedad del 1 10 100 1000 % % % % 9 9 9 9 = 1 = 1 * (10 % 9) = (1 * 1) % 9 = 1 = (10 % 9) * (10 % 9) = (1 * 1) % 9 = 1 = (100 % 9) * (10 % 9) = (1 * 1) % 9 = 1
De aqu deducimos que: Super(123) = ((1 + 2 + 3) + (1 + 2) + (1 + 3) + (2 + 3) + (1) + (2) + (3)) % 9 agrupando los digitos tenemos Super(123) % 9 = ( = = = 1 * 4 + 2 * 4 + 3 * 4 ) % 9 ( 24 ) % 9 6 % 9 6
www.icpc-bolivia.edu.bo
9 10 11 12 13 14 15 16 }
int n = X. l e n g t h ( ) ; long long s = 0L ; f or ( int i =0; i <n ; i++ ) { s += ( long long ) (X. a t ( i ) 0 ) ; } s = s <<( long long ) ( n 1) ; c o u t << ( s %9) << e n d l ;
www.icpc-bolivia.edu.bo
Problema - M ultiplos
Le dan tres n umeros enteros min, max, f actor. Se le pide hallar cuantos n umeros que est an en el rango desde min hasta max son divisibles por f actor. Por ejemplo si min = 0, max = 14, f actor = 5 tenemos los n umeros 0, 5, 10 que son divisibles por 5 as que el resultado esperado es 3.
Entrada
En cada l nea vienen los valores 1000000 min, max 1000000, 1 f actor 1000 separados por un espacio.
Salida
Escriba una linea con la cantidad de n umeros divisibles por f actor que se encuentran en el rango. Ejemplos de entrada 0 14 5 7 24 3 -123456 654321 997 -75312 407891 14 Ejemplos de salida 3 6 780 34515
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 65456 456789 13 La respuesta que debes entregar es: 30102
An alisis y Soluci on
Solo nos piden recorrer un rango de n umeros y contar cuantos son divisibles por otro.
www.icpc-bolivia.edu.bo
7 8 9 10 11 12 13 14 15 }
c i n >> min >> max >> f a c t o r ; res = 0; f or ( i = min ; i <= max ; i++ ) { if ( i % f a c t o r == 0 ) { r e s ++; } } c o u t << r e s << e n d l ;
www.icpc-bolivia.edu.bo
Entrada
La entrada viene en una l nea que contiene el n umero de palitos que Jos e encontr o.
Salida
Por cada caso de prueba escriba en una l nea el area del rect angulo m as grande que puede formar. Ejemplos de entrada 11 5 64 753 7254 Ejemplos de salida 6 1 256 35344 3288782
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 621 La respuesta que debes entregar es: 24025
An alisis y Soluci on
Un rect angulo tiene 4 lados, si dividimos la cantidad de palitos a la mitad, con los que quedan podemos hacer dos lados del rect angulo. Si es una cantidad si nos queda una cantidad par ya tenemos los dos lados dividiendo por 2. Si es impar basta con hacer que un lado tenga un palo mas que el otro.
www.icpc-bolivia.edu.bo
u s i n g namespace s t d ; int main ( ) { int N=0; c i n >>N) N=N/ 2 ; i f (N%2==0) c o u t << ( (N/ 2 ) (N/ 2 ) ) ; else c o u t << ( ( (N+1) / 2 ) ( (N1) / 2 ) ) ; }
www.icpc-bolivia.edu.bo
10
Entrada
Cada l nea contiene 6 n umeros que representan cajaX, cajaY, cajaZ, itemX, itemY, itemZ .
Salida
Escriba el m aximo numero de cajas de items que puede colocar en una caja. Ejemplos de entrada 100 98 81 3 5 7 10 10 10 9 9 11 201 101 301 100 30 20 913 687 783 109 93 53 6 5 4 3 2 1 Ejemplos de salida 7560 0 100 833 20
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 115 113 114 3 5 7 La respuesta que debes entregar es: 13984
An alisis y Soluci on
Se tienen 6 formas de acomodar las cajas. Solo tenemos que calcular cuantas cajas podemos colocar en cada forma. Luego hallamos el m aximo.
www.icpc-bolivia.edu.bo
11
u s i n g namespace s t d ; int c a l c ( int a , int b , int c , int d , int e , int f ) { return ( a/d ) ( b/ e ) ( c / f ) ; } int main ( ) { int boxX=0; int boxY ; int boxZ ; int itemX ; int itemY ; int itemZ ; cin cin cin cin cin >> >> >> >> >> boxY ; boxZ ; itemX ; itemY ; itemZ ;
int maximo=0; maximo=max( maximo , maximo=max( maximo , maximo=max( maximo , maximo=max( maximo , maximo=max( maximo , maximo=max( maximo , c o u t <<maximo ; }
c a l c ( boxX , boxY , boxZ , itemX , itemY , itemZ ) ) ; c a l c ( boxX , boxY , boxZ , itemX , itemZ , itemY ) ) ; c a l c ( boxX , boxY , boxZ , itemY , itemX , itemZ ) ) ; c a l c ( boxX , boxY , boxZ , itemY , itemZ , itemX ) ) ; c a l c ( boxX , boxY , boxZ , itemZ , itemX , itemY ) ) ; c a l c ( boxX , boxY , boxZ , itemZ , itemY , itemX ) ) ;
www.icpc-bolivia.edu.bo
12
Entrada
Escriba en una linea que contiene un numero 0 N 99.
Salida
Escriba en una l nea el numero de pasos requeridos para obtener el numero original. Ejemplos de entrada 26 55 0 Ejemplos de salida 4 3 1
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 71 La respuesta que debes entregar es: 12
www.icpc-bolivia.edu.bo
13
An alisis y Soluci on
Para obtener el primer d gito de un numero de dos d gitos hacemos dividimos por 10, el ultimo d gito se halla haciendo modulo 10. Luego nos piden sumar ambos. Para crear un numero nuevo con el primer d gito y el ultimo d gito hallado multiplicamos el primer d gito por 10 y sumamos el segundo.
www.icpc-bolivia.edu.bo
14
Problema - Acuario
Es bien conocido que en un acuario algunos peces se pueden comer a otros. Usted tiene un acuario que contiene un cantidad de peces del cual conoce el tama no. Usted sabe que un pez se puede comer a otro, solo cuando est a en el rango de: el doble de tama no o 10 veces m as grande. Se quiere agregar un pez a la pecera, pero queremos determinar el tama no para no causar conictos de comerse con otros peces. Considerando esto usted debe escoger un pez que est e entre los siguientes tama nos No hay riesgo de ser comido por otro pez si su tama no no est a entre 1/10 y 1/2 inclusive, del tama no de otro pez. No tiene tentaci on de comerse a otro pez si el tama no de los otros peces no est an entre 1/10 y 1/2 inclusive de su tama no. Por ejemplo si los tama nos de los peces est an entre 1 y 12 y queremos insertar un pez, ese puede tener tres posibles tama nos. Los posibles tama nos para el pez que est an fuera del rango establecido son 1, 11, 12.
Entrada
La entrada consiste de varias l neas. La primera l nea de un caso de prueba consiste en el tama no m as peque no. La segunda l nea consiste en el tama no m as grande que puede tener. La tercera l nea tiene el n umero de peces en el acuario. La cuarta l nea tiene los tama nos de los peces del acuario separados por un espacio.
Salida
Escriba en una l nea el n umero de tama nos que puede hallar y que no causen conictos entre peces. Ejemplos de entrada Ejemplo 1 1 12 1 1 Ejemplo 2 2 999 6 941 797 120 45 7 120 Ejemplos de salida Salida del Ejemplo 1 3 Salida del Ejemplo 2 10
www.icpc-bolivia.edu.bo
15
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 3 997 16 10 11 12 13 14 16 82 83 84 85 720 730 740 750 760 770
An alisis y Soluci on
La soluci on del problema es bastante sencilla: Se debe tomar todos los tama nos de los peces desde el m as peque no que en nuestro programa llamaremos tamM in hasta el m as grande que denominaremos tamM ax. Para cada uno de los tama nos de peces se verica si alg un pes se lo puede comer. Si no se lo puede comer contamos este tama no como una soluci on. Al nal imprimimos cuantas soluciones hemos encontrado.
www.icpc-bolivia.edu.bo
16
22 23 24 25 26 27 28 29 30 }
f or ( j =0; j <n ; j ++) i f ( come ( i , pez [ j ] ) | | come ( pez [ j ] , i ) ) break ; i f ( j==n ) r e s p u e s t a ++; } cout << r e s p u e s t a << e n d l ;
www.icpc-bolivia.edu.bo
17
Problema - Gusanillo
El gusanillo es una criatura de h abitos regulares. Se estira hacia adelante alguna distancia a lo largo de una rama de un arbol y para descansar. Si se detiene en una hoja se la come. Luego se estira la misma distancia que se estiro antes, y repite esta rutina hasta que se pasa del nal de la rama. Considere un gusanillo que recorre la longitud de una rama cuyas hojas esta espaciadas a intervalos uniformes. Dependiendo de la distancia entre el gusanillo y sus puntos de descanso puede o no puede comerse todas las hojas. Siempre existe una hoja al principio de la rama donde descansa antes de iniciar su recorrido. Dados tres valores que especican la longitud de la rama en cent metros, la distancia que recorre entres descansos y la distancia entre un par consecutivo de hojas, calcule el numero de hojas que el gusanillo consumir a.
Entrada
En una l nea, separados por un espacio, vienen el tama no de la rama, la distancia que recorre entre descansos y la distancia entre pares consecutivos de hojas. La entrada termina cuando no hay mas datos.
Salida
Escriba en una l nea el n umero de hojas que el gusanillo comer a. Ejemplos de entrada 11 12 20 21 15 2 4 6 4 3 7 7 3 16 5 Ejemplos de salida 3 2 1 2 1
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 175599 736 7 La respuesta que debes entregar es: 35
An alisis y Soluci on
Debemos sumar el avance del gusanillo hasta llegar al nal de la rama, en cada avance hay que ver si se encuentran hojas.
www.icpc-bolivia.edu.bo
18
www.icpc-bolivia.edu.bo
19
Entrada
Se da como entrada la altura y base del tri angulo, que son n umeros enteros positivos entre 3 y 1000 inclusive. La base siempre es menor que la altura.
Salida
La salida es un mensaje Si posible o No posible. Ejemplos de entrada 10 5 Ejemplos de salida No posible
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 1000 500 La respuesta que debes entregar es: No posible
www.icpc-bolivia.edu.bo
20
An alisis y Soluci on
Luego de hacer varios dibujos podemos llegar a la conclusi on que (2 base 4) = altura 2. En este caso no es aplicable el teorema de Pit agoras, porque, debe considerar que un car acter no puede estar en media linea.
www.icpc-bolivia.edu.bo
21
Problema - Votaci on
La familia Perez ha organizado una parrillada un s abado por la ma nana. Para cada uno de los invitados hay exactamente una chuleta. Pero como siempre, se pusieron a jugar futbol antes de almorzar. Como nadie vigilaba la parrillada, el perro se comi o una chuleta. Todos le echaron la culpa a otro por este descuido. Para resolver el problema decidieron hacer una votaci on, para ver quien se quedaba sin chuleta. Hay n miembros en la familia Perez. Cada uno est a representado por un ndice (0 i < n). Cada uno de los miembros puede votar por cualquier n umero de personas entre 0 y n 1. En orden de conocer quien pierde, se dene que ser a el que m as votos recibe. En caso de empate el que vot o m as veces pierde su chuleta. Si a un persiste el empate pierde el que tiene un ndice menor. A usted le dan un entero n que representa el n umero de personas que asisten a la parrillada. Despu es, el siguiente dato disponible es por quien vot o cada persona. Luego vienen los datos que indican que sugiri o cada uno para que que sea excluido. Veamos algunos ejemplos: Caso 1. Tenemos 3 personas. Los votos emitidos son 4, con los siguientes valores 0, 1, 2, 2 y los votos para excluir a uno fueron 2, 2, 0, 1. El que recibi o m as votos para ser excluido fue el del ndice 2 por lo que ser a excluido. Por lo tanto la respuesta es 2. Caso 2. Tenemos 3 personas. Los votos emitidos son 4, con los siguientes valores 0, 2, 2 y los votos para excluir a uno fueron 2, 0, 1. En este caso todos recibieron un voto para ser excluido. Dado el empate buscamos el que vot o m as veces que es el ndice 2. Por lo tanto la respuesta es 2. Caso 3. Tenemos 2 personas. Los votos emitidos son 2, con los siguientes valores 0, 1 y los votos para excluir a uno fueron 1, 0. En este caso los dos miembros obtuvieron 1 voto para ser excluidos y adem as empataron en la cantidad de votos realizados. Escogemos el del ndice menor que ser a el 0. Por lo tanto la respuesta es 0.
Entrada
La entrada consiste de varias l neas. La primera l nea contiene el n umero N de personas. La segunda l nea contiene el n umero M de votos. Luego siguen M votos donde votoi representa que el miembro que esta en el ndice votoi voto para excluir al miembro est a en excluiri . Luego vienen los M valores que se votaron para excluir. La entrada termina cuando no hay m as datos.
Salida
Escriba en una l nea el valor descrito anteriormente.
www.icpc-bolivia.edu.bo
22
Ejemplos de salida Salida 2 Salida 2 Salida 0 Salida 3 para el ejemplo 1 para el ejemplo 2 para el ejemplo 3 para el ejemplo 4
de entrada 2
de entrada 3
de entrada 4
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 10 9 4 5 6 7 8 9 0 1 2 5 6 7 8 9 0 1 2 3 La respuesta que debes entregar es: 0
An alisis y Soluci on
El problema consiste en leer dos vectores uno que denominamos voto y un segundo que denomi votado, para esto hemos hallado el mAximo. namos excluir. Luego buscamos el que fue mAs Con este valor podemos comparar quienes tienen un mayor valor en excluir para hallar la respuesta.
www.icpc-bolivia.edu.bo
23
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
u s i n g namespace s t d ; int main ( ) { string str ; int n , n1 , i ; c i n >> n ; c i n >> n1 ; int voto [ n1 ] , e x c l u i r [ n1 ] ; f or ( i =0; i <n1 ; i++ ) c i n >> voto [ i ] ; f or ( i =0; i <n1 ; i++ ) c i n >> e x c l u i r [ i ] ; int max = 0 ; int r e t = 0 ; f or ( int i = 0 ; i < n1 ; i ++) { i f ( voto [ i ] > max) { max = voto [ i ] ; ret = i ; } i f ( voto [ i ] == max) if ( excluir [ i ] > excluir [ ret ]) ret = i ; } c o u t << ( r e t ) << e n d l ; }
www.icpc-bolivia.edu.bo
24
Problema - Apostando
Usted tiene un negocio de apuestas donde las personas apuestan al n umero de goles con los que gana un equipo, en un juego de f utbol. Al nal del d a la compa n a desea conocer cual ha sido la ganancia neta. Como en todos los sistemas de apuestas las personas apuestan cierto monto de dinero y si su respuesta es correcta reciben la devoluci on de su dinero m as un cierto porcentaje predenido sobre su apuesta. En otros casos pierden todo el dinero que apostaron. A usted le dan los montos que cada persona ha apostado y el n umero de centavos por peso que cada persona puede ganar. Finalmente tiene el margen nal con el que se gan o. Usted debe determinar cuanto es la ganancia del d a en centavos.. Por ejemplo si las apuestas fueros de 10, 20, 30 signica que las personas apostaron 10 al empate, 20 a un victoria por un gol y 30 si la victoria fue por 2 goles. Luego tenemos los centavos de ganancia, que si fueran 20, 30, 40 signica que si es un empate gana 20 centavos por cada peso apostado, 30 si gana por un gol y 40 centavos si gana por 2 golees. Supongamos que la victoria es por un gol. Es decir el resultado nal es 1. Por lo tanto dos perdieron y uno gan o. De esta forma la empresa gan o 10 + 30 = 40 . Los que apostaron por una diferencia de un gol ganan 20 30 = 600 centavos. La ganancia neta es de 40 pesos menos 600 centavos que da 3400 centavos. Tomen en cuenta que si la diferencia de goles es 0 se considera un empate. Si la empresa pierde dinero al nal del d a la respuesta ser a negativa.
Entrada
La entrada consiste de varias L neas. La primera l nea de cada caso de prueba contiene un n umero N que indica el n umero apuestas. Luego vienen N valores enteros A que representan los valores apostados. El valor Ai representa el monto apostado para una victoria por i goles (ileq 0 < N ). Luego siguen N valores que signican los centavos por peso que gana si la victoria fue por i goles. La u ltima l nea de un caso de prueba contiene la diferencia en goles con la que gan o. Los casos de prueba terminan cuando no hay m as datos.
Salida
Escriba una l nea con la ganancia neta de la empresa.
www.icpc-bolivia.edu.bo
25
Ejemplos de entrada Ejemplo de entrada 3 10 20 30 20 30 40 1 Ejemplo de entrada 3 200 300 100 10 10 10 2 Ejemplo de entrada 2 5000 5000 100 2 0 Ejemplo de entrada 1 100 10 0 1
Ejemplos de salida Salida 3400 Salida 49000 Salida 0 Salida -1000 para el ejemplo 1 para el ejemplo 2 para el ejemplo 3 para el ejemplo 4
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 4 100 100 100 100 5 5 5 5 0 La respuesta que debes entregar es: 29500
An alisis y Soluci on
Primero se leen los vectores, seguidamente hay que sumar todos los valores que son diferentes al que igualo con el resultado. Con este valor calculamos la diferencia entre lo ganado y lo que hay que pagar
www.icpc-bolivia.edu.bo
26
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
u s i n g namespace s t d ;
int main ( ) { string str ; int n , i ; c i n >> n ; int c a n t i d a d e s [ n ] , c e n t a v o s P o r P e s o [ n ] ; f or ( i =0; i <n ; i++ ) c i n >> c a n t i d a d e s [ i ] ; f or ( i =0; i <n ; i++ ) c i n >> c e n t a v o s P o r P e s o [ i ] ; int r e s u l t a d o ; c i n >> r e s u l t a d o ; int g a n a n c i a =0; f or ( i =0; i <n ; i ++){ i f ( i != r e s u l t a d o ) g a n a n c i a+=c a n t i d a d e s [ i ] ; } c o u t << ( g a n a n c i a 100 c a n t i d a d e s [ r e s u l t a d o ] c e n t a v o s P o r P e s o [ r e s u l t a d o ] ) << e n d l ; 23 }
www.icpc-bolivia.edu.bo
27
Entrada
En una l nea esta l nea contiene el monto de dinero inicial que tiene y luego separado por un espacio est a una cadena con el detalle de las apuestas, W = gana y L = pierde.
Salida
Escriba en una l nea el monto de dinero con termino. Ejemplos de entrada 12 WWWWWWWW 15 LLLWLLLL 20 WLWLWLWL 925 WLLLLLWLLLLLLWWWWWLWLLWLLLLLLWL Ejemplos de salida 20 1 23 934
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 634 WWWLWLWWW La respuesta que debes entregar es: 641
www.icpc-bolivia.edu.bo
28
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#include < i o s t r e a m > #include < a l g o r i t h m > #include < s t r i n g > u s i n g namespace s t d ; int main ( ) { int s , i , j , k , initSum ; k=1; c i n >> initSum ; s t r i n g outcome ; c i n >> outcome ; int b e t = 1 , sw=0; f or ( i = 0 ; i < outcome . l e n g t h ( ) ; i ++) { i f ( outcome [ i ] == W ) { initSum += b e t ; bet = 1 ; } else { initSum = b e t ; bet = bet 2 ; } i f ( b e t > initSum ) { c o u t << initSum << e n d l ; sw=1; break ; } } i f ( sw==0) c o u t << initSum << e n d l ; }
www.icpc-bolivia.edu.bo
29
Entrada
La entrada consiste de varias l neas. La primera l nea de cada caso de prueba consiste del numero de registros t de tiempo que siguen. Luego vienen t registros de tiempo. La ultima linea contiene el numero n de promedios m oviles que debemos hallar.
Salida
Escriba en la salida una l nea con los n promedios hallados, en segundos redondeando el resultado hacia el n umero de abajo, sin decimales.
Ejemplos de entrada
Datos para el ejemplo 1 5 01:19:10 01:17:40 01:19:44 01:17:23 01:17:0 3 Datos para el ejemplo 2 5 01:19:10 01:17:40 01:19:44 01:17:23 01:17:07 5
Ejemplos de salida
Salida para el ejemplo 1 [4731, 4695, 4682] Salida para el ejemplo 2 [4692]
www.icpc-bolivia.edu.bo
30
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 5 01:19:10 01:17:40 01:19:44 01:17:23 01:17:07 1 La respuesta que debes entregar es: [4750, 4660, 4784, 4643, 4627]
An alisis y Soluci on
Este problema se basa en calcular el promedio. Las dos dicultades que hay que resolver son: Convertir las horas minutos y segundos a un valor, esto se hace con h 3600 + m 60 + s; Separar de una cadena los valores horas, minutos y segundos. Para esto utilizamos la instrucci on sscanf (tt, % d: % d: % d, & h, &m, & s). Esta instrucci on requiere que tt sea un cadena de caracteres constante, y se hace con const char *tt=t[z].c str(). El m etodo c str() convierte una cadena en un vector de caracteres. int h, m, s;
www.icpc-bolivia.edu.bo
31
22 23 24 25 26 27 28 29 30 31 32
} r e s [ i ] = avg /n ; } c o u t << [ ; f or ( i =0; i <n ; i ++){ c o u t << r e s [ i ] ; i f ( i < n 1) c o u t << , ; } c o u t << ] << e n d l ; }
www.icpc-bolivia.edu.bo
32
Problema - Conservaci on
En un laboratorio se est a realizando experimentos con bacterias, para ello se deja en una plataforma de vidrio circular algunas de ellas y pasado cierto momento se observan las mismas. Han descubierto que cuando las bacterias est an muy juntas, no se comportan como los investigadores quieren, para que el experimento tenga exito, las bacterias deben ubicarse a una distancia d (en forma horizontal y/o vertical) entre ellas, esta distancia depende de la bacteria que observar an. Los investigadores tienen varios contenedores de forma circular, lo u nico que saben de estos contenedores es el radio de los mismos. Entonces cuando toman uno de por ejemplo 3 de radio, y quieren experimentar con bacterias que deben estar a distancia 2 entre ellas, ellos pueden poner a lo sumo 9 bacterias, ninguna de ellas est a exactamente en el borde de la contenedora.
Entrada
La entrada consiste de dos n umeros enteros positivos: r, d, que indican el radio de la contenedora y la distancia entre las bacterias, respectivamente. Los contenedores, tienen radios entre 3 y 20 inclusive, y la distancia entre bacterias puede estar entre 1 y 10 inclusive.
Salida
La salida es un n umero entero que indica la cantidad de bacterias que pueden ubicar para su experimento. Ejemplos de entrada 3 2 Ejemplos de salida 9
Problema
Para el dato de entrada siguiente escriba un programa que halle la respuesta. 3 3
An alisis y Soluci on
Para resolver este problema hay que utilizar la ecuaci on del circulo y recordar como saber si un elemento esta dentro el circulo o fuera del mismo. Luego recorrer el vericando cuales de los puntos caen en su interior.
www.icpc-bolivia.edu.bo
33
www.icpc-bolivia.edu.bo
34
Input
La entrada consiste de varios casos de prueba. Cada caso de prueba consiste un n umero en una sola linea que representa X con 1 X 300. Los datos de entrada terminan cuando X = 0.
Output
Por cada caso de prueba, escriba en una linea el n umero formado por unos y ceros m as peque no que es m ultiplo de X . Ejemplos de entrada 2 5 10 9 25 0 Ejemplos de salida 10 10 10 111111111 100
www.icpc-bolivia.edu.bo
35
18 int main ( ) { 19 int x ; 20 // f o r ( x =1; x <=300 ; x++){ 21 while ( s c a n f ( % d , &x ) && x ) { 22 printf ( % l l d \ n , s o l v e ( x ) ) ; 23 } 24 }
www.icpc-bolivia.edu.bo
36
Input
Por cada caso de prueba se ingresaran dos lineas. En la primera hay un numero entero N (3 N 1000) el numero de personas clasicadas. La segunda linea contiene una cadena de caracteres de longitud N , con letras min usculas y may usculas (de la a hasta la z y desde la A hasta la Z ). La entrada terminara con N igual a 0 (cero).
Output
Por cada caso de prueba devolver la posici on en la que se encuentra Moss comenzando de 1. Se garantiza que hay solo una letra que no se repite. Ejemplos de entrada 4 AaAA 5 bbxaa 6 XBBbBX 0 Ejemplos de salida 2 3 4
www.icpc-bolivia.edu.bo
37
12 v [ s [ i ]]++; 13 pos [ s [ i ] ] = i +1; 14 } 15 f or ( int i =0; i <=150 ; i ++) 16 i f ( v [ i ] == 1 ) 17 return pos [ i ] ; 18 return 2; 19 } 20 21 int main ( ) { 22 // f r e o p e n ( i n . i n , r , s t d i n ) ; 23 // f r e o p e n ( x . o u t , w , s t d o u t ) ; 24 int N; 25 scanf ( % d , &N) ; 26 while (N) { 27 string s ; 28 c i n >>s ; 29 printf ( % d \ n , s o l v e ( s ) ) ; 30 scanf ( % d , &N) ; 31 } 32 }
www.icpc-bolivia.edu.bo
38
Dados los tipos de movimientos de la nueva cha, determinar a cuantas casillas puede llegar despu es de varios movimientos en un tablero de NxN si la cha comenzar a en una de las esquinas del tablero.
Input
Q = Numero de casos de prueba Por cada caso de prueba: N = Tama no del tablero cuadrado NT = Numero de tipos de movimiento Por cada tipo de movimiento x y , donde x es el movimiento horizontal (izquierda,derecha),e ?y?movimiento vertical (arriba o abajo)
Output
Por cada caso de prueba, el n umero de casillas que la nueva pieza de ajedrez puede alcanzar en varias movidas
www.icpc-bolivia.edu.bo
39
Ejemplos de entrada 1 3 8 1 2 1 -2 2 1 2 -1 -2 1 -2 -1 -1 2 -1 -2
Ejemplos de salida 8
El caso de ejemplo es el del caballo, tenemos ocho tipos de movimientos indicados en la entrada: X 1 1 2 2 -1 -1 -2 -2 Y 2 -2 1 -1 2 -2 1 -1
www.icpc-bolivia.edu.bo
40
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
#include <queue > #include < s e t > #include <map> #include <cmath> #define f o r e a c h ( IT ,C) f or ( t y p e o f (C. b e g i n ( ) ) IT=C. b e g i n ( ) ; IT!=C. end ( ) ; IT++) u s i n g namespace s t d ; const int MAX = 1 0 9 ; b o o l m[MAX] [MAX] ; void r e s u e l v a ( ) { int n , x , y , xx , yy ,nm; int r e s = 0 ; queue <int > qx , qy ; scanf ( % d ,&n ) ; scanf ( % d ,&nm) ; int mx [nm] , my [nm ] ; f or ( int i =0; i <nm; i ++){ scanf ( % d % d ,&mx [ i ] ,&my [ i ] ) ; } memset (m, f a l s e , s i z e o f (m) ) ; m[ 1 ] [ 1 ] = t r u e ; r e s ++; qx . push ( 1 ) ; qy . push ( 1 ) ; while ( ! qx . empty ( ) ) { x = qx . f r o n t ( ) ; qx . pop ( ) ; y = qy . f r o n t ( ) ; qy . pop ( ) ; f or ( int i =0; i <nm; i ++){ xx = x + mx [ i ] ; yy = y + my [ i ] ; i f ( yy>=1 and xx>=1 and yy<=n and xx<=n and m[ yy ] [ xx ] == f a l s e ) { qx . push ( xx ) ; qy . push ( yy ) ; m[ yy ] [ xx]= t r u e ; r e s ++; } } } printf ( % d \ n , r e s ) ;
55 56 57 58 59 60 61 62 63 }
www.icpc-bolivia.edu.bo
41
64 int main ( ) { 65 int q ; 66 scanf ( % d ,&q ) ; 67 f or ( int i =1; i <=q ; i ++) 68 resuelva () ; 69 }
www.icpc-bolivia.edu.bo
42
Input
En la primera linea de entrada nos dar an un numero T que representa la cantidad de casos de prueba. Por cada caso de prueba hay una linea que contiene dos n umeros C (1 C 100) y N (1 N C ). Donde C es el numero de d as hay para ver N pel culas.
Output
Por cada caso de prueba imprima una linea con el m nimo costo para ver N pel culas en C d as. Ejemplos de entrada 5 2 1 3 1 7 7 14 7 92 62 Ejemplos de salida 20 40 150 360 2220
www.icpc-bolivia.edu.bo
43
17 i f (N > days10 ) { 18 r e s += days10 1 0 ; 19 N = days10 ; 20 } 21 e l s e return N 1 0 ; 22 i f (N > days20 ) { 23 r e s += days20 2 0 ; 24 N = days20 ; 25 } 26 e l s e return r e s + N 2 0 ; 27 return r e s + N 3 0 ; 28 } 29 30 int main ( ) { 31 int C, N, T; 32 scanf ( % d , &T) ; 33 f or ( int i =0; i <T ; i ++){ 34 scanf ( % d % d , &C, &N) ; 35 printf ( % d \ n , s o l v e (C, N) ) ; 36 } 37 }
www.icpc-bolivia.edu.bo
44
Problema - Soluciones
Un laboratorio cient co aliado a la IOI Bolivia tiene diferentes tipos de soluciones acidas y alcalinas. Cada soluci on tiene asignado un entero que representa su caracter stica. Los enteros positivos de 1 a 1,000,000,000, representan soluciones acidas mientras que los enteros negativos de -1 a -1,000,000,000, representan las soluciones alcalinas. Los valores caracter sticos para la mezcla del mismo monto de las 2 soluciones esta denido como la suma de los valores caracter sticos de las dos soluciones mezcladas. Este laboratorio quiere hacer una mezcla con los valores caracter sticos m as cercanos al cero cuando el mismo monto de las dos soluciones han sido mezcladas. Por ejemplo, una lista de valores caracter sticos es dada [99, 2, 1, 4, 98]. En este caso, la suma de los enteros -99 y 98 da -1, que es el valor m as cercano a 0. Note que es posible de hacer una mezcla con un valor cercano a 0 mezclando dos soluciones alcalinas o dos soluciones acidas. Una lista de valores caracter sticos para valores acidos y alcalinos es dado. Escriba un programa que imprima el valor caracter stico mas cercano a 0 cuando estos son mezclados juntos.
Input
El numero T de casos de prueba. Cada caso de prueba consiste: El n umero total de soluciones, (2 N 100, 000), es dado en la primera linea. En la segunda linea,N n umeros de valores caracter sticos es dado en orden ascendente. Estos n umeros son mayores que o iguales a -1,000,000 y menores o iguales a 1,000,000,000. Estos valores caracter sticos son u nicos.
Output
Imprima el valor m as cercano a 0 que puede ser formado al mezclar dos soluciones. Si existieran varios valores igual de cercanos al cero, imprima el menor. Ejemplos de entrada 3 5 -99 -2 -1 4 98 4 -100 -2 -1 103 4 4 -8 8 -4 Ejemplos de salida -1 -3 0
En los casos de ejemplo, -1 se puede conseguir mezclando -99 con 98; y -3 se puede conseguir mezclando -2 y -1, en ambos ejemplos no se puede conseguir un valor caracter stico m as cercano al cero. Y en el ultimo ejemplo, se pueden conseguir 4 y -4 en el que ambos son igual de cercanos al 0, por lo tanto, se usa el menor.
www.icpc-bolivia.edu.bo
45
www.icpc-bolivia.edu.bo
46
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
b = mit ; else a = mit +1; } a hacerse cero // b apunta a un v a l o r <= a donde d e b e r A int r = 9 0 0 0 0 0 1 ; f or ( int k=1;k <=1;k++)// r e v i s a m o s v a l o r e s c e r c a n o s a l punto optimo i f ( b + k >= 0 and b + k < n and b + k != pos ) r = menor ( r , vc [ b+k ] + vc [ pos ] ) ; return r ; } int r e s u e l v a ( ) { int r = 9 0 0 0 0 0 1 ; f or ( int i =0; i <n ; i ++){ r = menor ( r , c e r c a n o a c e r o ( i ) ) ; // p r i n t f (## % d % d [ %d ] \ n , vc [ i ] , c e r c a n o a c e r o ( i ) , r ) ; } return r ; } int b r u t e f o r c e ( int pos ) { int r = 9 0 0 0 0 0 0 ; f or ( int i =0; i <n ; i ++){ i f ( i != pos ) r = menor ( r , vc [ pos ] + vc [ i ] ) ; } // p r i n t f (>> % d = % d \ n , vc [ pos ] , r ) ; return r ; } int r e s o l v e b r u t e f o r c e ( ) { int r = 9 0 0 0 0 0 1 ; f or ( int i =0; i <n ; i ++) r = menor ( r , b r u t e f o r c e ( i ) ) ; return r ; } void l e c t u r a ( ) { scanf ( % d ,&n ) ; f or ( int i =0; i <n ; i ++) scanf ( % d ,& vc [ i ] ) ; s o r t ( vc , vc+n ) ; // e n t r a d a ordenada } int main ( ) { int q ; scanf ( % d ,&q ) ; f or ( int i =1; i <=q ; i ++){ lectura () ; printf ( % d \ n , r e s u e l v a ( ) ) ; // a s s e r t ( n > 1000 or ( r e s u e l v a ( ) == r e s o l v e b r u t e f o r c e ( ) ) ) ;
www.icpc-bolivia.edu.bo
47
92 } 93 }
www.icpc-bolivia.edu.bo
48
Input
La entrada consiste de varios casos de prueba. Cada caso de prueba consiste de la hora actual en el formato HH : M M y el incremento de hora que puede ser en el formato HH : M M o solamente un n umero que representa el tiempo en segundos que es un numero entre 0 y 1000. La entrada termina cuando la hora minutos y el incremento son 0
Output
Por cada caso de prueba, la nueva hora en el formato HH : M M . Ejemplos de entrada 09:00 1:00 10:46 15 1:00 300 00:00 0 Ejemplos de salida 10:00 11:01 06:00
www.icpc-bolivia.edu.bo
49
Input
En la primera linea le dar an un numero entero T (1 T 100) el numero de casos de prueba. Por cada caso de prueba le dar an una linea con dos enteros N (3 N 50), M (N 1 M 500), N es la cantidad de destinos, M la cantidad de conexiones entre ellos. Las siguientes M lineas contienen tres n umeros X , Y y C (1 X, Y N ) adem as X y Y son diferentes). Donde X y Y representan una conexi on entre el destino X y el destino Y . C es el estado de la carretera donde 1 signica que la carretera esta desbloqueada y 0 si la carretera esta bloqueada.
Output
Por cada caso de prueba imprima un entero correspondiente a la m nima cantidad de caminos que hay que desbloquear para que todo el pa s este conectado nuevamente. Ejemplos de entrada 2 33 120 230 130 67 121 160 230 250 341 350 560 Ejemplos de salida 2 3
www.icpc-bolivia.edu.bo
50
Sumamos los valores resultantes 8 + 12 + 1 + 6 + 3 + 12 + 5 + 18 + 7 + 24 + 9 + 0 = 105. La primera decena superior al n umero es 110, y restamos del valor hallado 110 105 = 5. Por lo tanto, el d gito de vericaci on es 5. Su tarea consiste en hallar para cada c odigo de 12 d gitos en la entrada hallar el c odigo de vericaci on.
www.icpc-bolivia.edu.bo
51
Input
La primera linea contiene el numero de casos de prueba. Las linea siguientes contienen un caso de prueba consistente en un numero de doce d gitos.
Output
Por cada caso de prueba imprima en una linea el c odigo de vericaci on EAN. Ejemplos de entrada 4 841234567890 841234567891 851234567893 401234567896 Ejemplos de salida 5 7 0 3
www.icpc-bolivia.edu.bo
52
Input
La primera linea contiene un numero que indica el numero de casos de prueba. En una linea viene un caso de prueba que contiene el numero 0 n 40 exponente de la expresion.
Output
Por cada caso de prueba su programa debe escribir en una linea y separados por un espacio los coecientes del polinomio resultante. Ejemplos de entrada 3 1 2 0 Ejemplos de salida 1 1 1 1 2 3 2 1 1
www.icpc-bolivia.edu.bo
53
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 }
t [0][3+2]=1; f or ( int i =1; i <max ; i ++){ f or ( int j = 3 ; j < max 3 ; j ++) { f or ( int j 2 = 0 ; j 2 < 3 ; j 2++) { t [ i ] [ j ]+=t [ i 1 ] [ j j 2 ] ; } i f ( t [ i ] [ j ]==0) break ; } }
int c a s o s , n ; f e >> c a s o s ; f or ( int j = 0 ; j < c a s o s ; j ++) { f e >> n ; i f ( n==1){ f s << 1 << e n d l ; } else { f or ( int k = 3 ; t [ n ] [ k ] > 0; k++) f s << t [ n ] [ k ] << ; f s << e n d l ; } } return 0 ;
www.icpc-bolivia.edu.bo
54
Cada grupo representa a un numero especico y corresponden a los n umeros 5, 3, 2, 1. Cuando queremos representar un n umero simplemente colocamos en 1 en algunos de los 0 de las columnas. Por ejemplo para representar el numero 12 escogemos dos n umeros de la columna de los cincos y uno de la columna del dos y escribimos: 00011 000 01 0
Un mismo numero puede tener m ultiples representaciones. La tabla siguiente nuestra varias representaciones y su equivalente decimal. 00000 00000 00011 00000 00001 000 000 000 011 000 01 11 00 00 00 0 0 0 0 1 =2 =4 =10 =6 =6
Hay que hacer notar que hay varias interpretaciones diferentes de una Yupana y esta es una de ellas, no hay un consenso sobre el tema.
Input
La primera linea contiene un numero que indica el numero de casos de prueba. Cada caso de prueba contiene una linea con la representaci on en el formato de la Yupana que consiste en 11 n umeros 1 o ceros.
Output
Por cada caso de prueba su programa debe escribir en una linea y separados por un espacio la representaci on en formato decimal del numero en formato de Yupana.
www.icpc-bolivia.edu.bo
55
Ejemplos de salida 2 4 10 6 6
www.icpc-bolivia.edu.bo
56
Problema - Palindromes
DEBE LEER LOS DATOS DE palindrome.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-palindrome.out Los palindromes son cadenas que le das de izquierda a derecha o de derecha a izquierda son iguales por ejemplo abba. Se tiene dos caracteres a y b con los cuales deseamos crear cadenas palindromes. Por ejemplo ababa. Los palindromes se generan en orden alfab etico. Si generamos 16 cadenas palindromes utilizando estos dos caracteres exclusivamente tenemos: a, aa, aaa, aaaa, aaaaa, aaaaaa, aabaa, aba, ababa, abba, abbba, b, baaaab, baaab, baab, bab
Input
La entrada contiene m ultiplos casos de entrada. La primera linea contiene el numero de casos de prueba. Cada caso de prueba es una numero (1 n 50000) en una linea que indica el numero de cadena que queremos mostrar. de cada caso de prueba tiene el numero de puntos del pol gono.
Output
Por cada caso de prueba imprima en una linea la cadena palindrome correspondiente al numero de cadena solicitado. Ejemplos de entrada 6 1 3 6 10 55 80 Ejemplos de salida a aaa aaaaaa aaaaaaaaaa aaaaaaaaaaababbabaaaaaaaaaaa aaaaaaaaaabaabbbaabaaaaaaaaaa
www.icpc-bolivia.edu.bo
57
8 int main ( ) { 9 o f s t r e a m f s ( s a l i d a palindrome . out ) ; 10 i f s t r e a m f e ( palindrome . i n ) ; v e c t o r <s t r i n g > a ; 11 a . push back ( ) ; 12 a . push back ( a ) ; 13 a . push back ( b ) ; 14 int i =0; 15 while ( i < 50000) { 16 s t r i n g cad = a [ i ] ; 17 a . push back ( a+cad+a ) ; 18 a . push back ( b+cad+b ) ; 19 i ++; 20 } 21 s o r t ( a . b e g i n ( ) , a . end ( ) ) ; 22 int n , q ; 23 f e >> n ; 24 f or ( i = 0 ; i <n ; i ++) { 25 f e >> q ; 26 f s << a [ q ] << e n d l ; 27 28 } 29 return 0 ; 30 }
www.icpc-bolivia.edu.bo
58
Input
La entrada consiste en tres enteros A, B y C (0 < A < B < C < 100), las posiciones iniciales de los canguros.
Output
Imprime la cantidad maxima de movimientos que los canguros pueden hacer. Ejemplos de entrada 2 3 5 3 5 9 Ejemplos de salida 1 3
www.icpc-bolivia.edu.bo
59
16 17 18 19 }
www.icpc-bolivia.edu.bo
60
Problema - Cordillera
DEBE LEER LOS DATOS DE cordillera.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-cordillera.out En Bolivia tenemos m ultiples monta nas. Dada los puntos de altura de una imagen simplicada, contar cuantas picos existen en la imagen Dado que todos los n umeros consecutivos son diferentes tenemos los siguientes casos: a) 1 2 3 b) 3 2 1 c) 1 3 2 d) 2 1 3 En los casos a y b, tenemos una recta pendiente, as que no podemos contar como un pico en la imagen. El el caso c si tenemos un pico. /\ / / En el caso d, no tenemos un pico, sino otra monta na que comienza, as que no lo podemos contar como un pico. / \ \/ / \
Entrada
La entrada consiste de varios casos de prueba Q. Cada caso de prueba tiene: El numero de puntos N (N 1000000), el primero y ultimo tienen el valor 0. Siguen N alturas hi 0 1000. Dos alturas consecutivas son diferentes
Salida
Cuantos picos hay en el gr aco Ejemplos de entrada 1 9 0 10 0 8 0 3 4 5 0 Ejemplos de salida 3
www.icpc-bolivia.edu.bo
61
int n ; f e >> n ; a s s e r t ( n>=3) ; int a , b , c ; int r e s = 0 ; f e >> a ; a s s e r t ( a == 0 ) ; f e >> b ; a s s e r t ( b != 0 ) ; f or ( int i =3; i <=n ; i ++){ f e >> c ; a s s e r t ( c != b ) ; i f ( a < b and b > c ) // b e s un p i c o r e s ++; a = b; b = c;
www.icpc-bolivia.edu.bo
62
45 } 46 a s s e r t ( c == 0 ) ; 47 f s << r e s << e n d l ; 48 } 49 int main ( ) { 50 int nc ; 51 f e >> nc ; 52 f or ( int i =1; i <=nc ; i ++){ 53 resuelva () ; 54 } 55 }
www.icpc-bolivia.edu.bo
63
Problema - Eratostenes
DEBE LEER LOS DATOS DE eratostenes.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-eratostenes.out La criba de Eratostenes es un famoso algoritmo para buscar todos los numeros primos hasta N . El algoritmo es: 1. Escribir todos los n umeros entre 2 y N inclusive. 2. Buscar el menor numero no tachado y llamarlo P , donde P es primo. 3. Dejando fuera P , tachar todos los m ultiplos que aun no est en tachados. 4. Si todos los n umeros no han sido tachados ir al paso 2. Escribe un programa que dado un numero N y K encuentre el K -esimo entero que sera tachado.
Input
La entrada consiste en dos enteros N y K (2 K < N 1000)
Output
Imprimir el K -esimo numero a ser tachado. Ejemplos de entrada 3 7 3 15 12 10 7 Ejemplos de salida 6 7 9
www.icpc-bolivia.edu.bo
64
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
#define MAXN 1000 int n , k , c a s o s , s i t o [MAXN+ 1 ] ; int s o l v e ( ) { f or ( int i = 2 ; i <= n ; ++i ) { i f ( s i t o [ i ] ) continue ; f or ( int j = i ; j <= n ; j += i ) { i f ( s i t o [ j ] ) continue ; i f ( !k ) return j ; sito [ j ] = 1; } } } int main ( void ) { o f s t r e a m f s ( s a l i d a e r a t o s t e n e s . out ) ; ifstream fe ( eratostenes . in ) ; f e >> c a s o s ; f or ( int i = 0 ; i < c a s o s ; ++i ) { f e >> n ; f e >> k ; memset ( s i t o , 0 , s i z e o f ( s i t o ) ) ; f s << s o l v e ( ) << e n d l ; } return 0 ; }
www.icpc-bolivia.edu.bo
65
Problema - Examen
DEBE LEER LOS DATOS DE examen.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-examen.out Alvaro, Edwin y Gabriel daran un examen para ingresar a un instituto, este instituto tiene la peculiaridad de siempre realizar examenes de seleccion mutilple. Desafortunadamente ellos no siempre tienen tiempo de estudiar pero quieren aprovechar que se les dara un examen de seleccion multiple, ya que ellos tienen una teoria sobre estos. Alvaro dice que tendra mejor nota utilizando la secuencia: A, B, C, A, B, C, A, B, C . . . Edwin esta convencido de que la mejor secuencia: es B, A, B, C, B, A, B, C, B, A, B, C . . . Gabriel utilizara la secuencia: C, C, A, A, B, B, C, C, A, A, B, B . . . Tu tarea es determinar las respuestas correctas para el examen y asi determinar quien de los tres tenia razon con su secuencia, la cual es la que contiene mas respuestas correctas.
Input
La primera linea contiene un entero N (1 N 100), la cantidad de preguntas en el examen. B. CEstas La segunda linea contiene una cadena con N letras A, son en orden las respuestas correctas de las preguntas del examen.
Output
En la primera linea imprime M , la cantidad maxima de respuestas correctas de uno de los tres. Despues imprime los nombres de los chicos en orden alfabetico de quienes tienen M respuestas correctas. Ejemplos de entrada 2 5 BAACC 9 AAAABBBBB Ejemplos de salida 3 Edwin 4 Alvaro Edwin Gabriel
www.icpc-bolivia.edu.bo
66
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#include < f s t r e a m > u s i n g namespace s t d ; int main ( ) { o f s t r e a m f s ( s a l i d a examen . out ) ; i f s t r e a m f e ( examen . i n ) ; int l e n , c a s o s ; f e >> c a s o s ; f or ( int j =0; j < c a s o s ; ++j ) { string s ; f e >> l e n >> s ; int s k o r [ 3 ] = { 0 } ; f or ( int i =0; i < l e n ; s k o r [ 0 ] += s [ i ] == s k o r [ 1 ] += s [ i ] == s k o r [ 2 ] += s [ i ] == } int n a j = max( s k o r [ 0 ] , f s << n a j << e n d l ; i f ( s k o r [ 0 ] == n a j ) i f ( s k o r [ 1 ] == n a j ) i f ( s k o r [ 2 ] == n a j ) } return 0 ; }
www.icpc-bolivia.edu.bo
67
Problema - Quimica
DEBE LEER LOS DATOS DE quimica.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-quimica.out Lucas esta jugando otra vez en la clase de quimica. En vez de estar balanceando ecuaciones el esta escribiendo secuencias codicadas en un papel. Lucas modica cada palabra adicionando despu es de cada vocal la letra py luego la misma vocal de nuevo. Por ejemplo, el tiene clase que llega a convertirse en clapasepe y la palabra juego llega a convertirse en jupuepegopo. El profesor mira el papel del Lucas con las palabras codicadas y desea saber que escribi o. Escribe un programa que decodique lo que escribi o Lucas.
Input
La entrada consiste de varios casos de prueba. la primera linea contiene el numero de casos de prueba. Cada caso de prueba consiste en una linea que contiene la sentencia codicada. La sentencia contiene solo letras min usculas y espacios. Las palabras estaran separadas por un solo espacio y no habr a espacios de mas al inicio o al nal. La cantidad total de caracteres no sobrepasara los 100.
Output
Imprime la sentencia decodicada en una sola linea.
Ejemplos de entrada
2 zepelepenapa papapripikapa bapas jepe doposapadgapa opovapa kepemipijapa
Ejemplos de salida
zelena paprika bas je dosadna ova kemija
www.icpc-bolivia.edu.bo
68
int main ( ) { o f s t r e a m f s ( s a l i d a quimica . out ) ; i f s t r e a m f e ( quimica . i n ) ; int c a s o s ; char u l a z [ 1 0 5 ] ; // s t r i n g u l a z ; f e >> c a s o s ; f e . g e t l i n e ( ulaz , 105) ; f or ( int k=0; k< c a s o s ; ++k ) { f e . g e t l i n e ( ulaz , 105) ; f or ( int i =0; u l a z [ i ] ! = \ 0 ; ++i ) { f s << u l a z [ i ] ; i f ( s t r c h r ( a e i o u , u l a z [ i ] ) != NULL ) i += 2 ; } f s << e n d l ; } return 0 ; }
www.icpc-bolivia.edu.bo
69
Problema - cajas
DEBE LEER LOS DATOS DE cajas.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-cajas.out Estas encargado del control de calidad. Dadas las dimensiones de una caja (X, Y, Z 106 ) Determinar cuantos cajas pueden entrar en la caja inicial. Dos cajas de dimensiones iguales pueden entrar una dentro de otra. Nota: Las cajas pueden ser volteadas en angulos rectos
Entrada
La entrada consiste de varios casos de prueba, la primera linea contiene el n umero de casos NC. por cada caso se tienen tres valores X, Y, Z con las dimensiones de la caja. Las siguiente l nea tiene el n umero N 106 de cajas que se disponen para colocar al interior de la primera caja. Luego siguen N l neas con las dimensiones de las cajas x, y, z
Salida
Imprima una l nea con un numero que indica el n umero de cajas que entran en la caja inicial. Ejemplos de entrada 1 3 4 3 4 4 2 4 3 3 3 4 2 3 3 3 5 Ejemplos de salida 2
www.icpc-bolivia.edu.bo
70
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
#include < v e c t o r > #include < a l g o r i t h m > #include < c s t r i n g > #include < c a s s e r t > #include <cmath> #include < f s t r e a m > #define f o r e a c h ( IT ,C) f or ( t y p e o f (C. b e g i n ( ) ) IT=C. b e g i n ( ) ; IT!=C. end ( ) ; IT++) u s i n g namespace s t d ; o f s t r e a m f s ( s a l i d a c a j a s . out ) ; ifstream fe ( cajas . in ) ; b o o l e n t r a ( v e c t o r <int > c a j a , v e c t o r <int > o r i g ) { s o r t ( c a j a . b e g i n ( ) , c a j a . end ( ) ) ; f or ( int i =0; i < 3; i ++) i f ( caja [ i ] > orig [ i ] ) return f a l s e ; return t r u e ; } void r e s u e l v a ( ) { int n ; v e c t o r <int > o r i g ( 3 ) , c a j a ( 3 ) ; f or ( int i =0; i < 3; i ++) f e >> o r i g [ i ] ; s o r t ( o r i g . b e g i n ( ) , o r i g . end ( ) ) ; int r e s = 0 ; f e >> n ; f or ( int j =1; j <=n ; j ++){ f or ( int i =0; i < 3; i ++) f e >> c a j a [ i ] ; i f ( entra ( caja , o r i g ) ) r e s ++; } f s << r e s << e n d l ; } int main ( ) { int nc ; f e >> nc ; f or ( int i =1; i <=nc ; i ++){ f s << Caso : << i ; resuelva () ; } }
www.icpc-bolivia.edu.bo
71
Input
La primera linea contien el numero de casos de prueba. Las linea siguientes contienen un caso de prueba.
Output
Por cada caso de prueba imprima la frase biensi la cadena de caracteres es un codigo USSD valido o malsi es codigo USSD es invalido. Ejemplos de entrada 8 *109*1234# *1234*109# *109*109# *109*1234#2 *109*109 109*109# *abc*1234# *109*ab34# Ejemplos de salida bien mal bien mal mal mal mal mal
www.icpc-bolivia.edu.bo
72
9 10 int main ( ) { 11 o f s t r e a m f s ( s a l i d a codigoUSSD . out ) ; 12 i f s t r e a m f e ( codigoUSSD . i n ) ; 13 14 int l e n , c a s o s ; 15 f e >> c a s o s ; 16 f or ( int j =0; j < c a s o s ; ++j ) { 17 s t r i n g cad ; 18 f e >> cad ; 19 i f ( cad . a t ( 0 ) != ) 20 f s << mal << e n d l ; 21 else 22 i f ( cad . a t ( 4 ) != ) 23 f s << mal << e n d l ; 24 else 25 i f ( cad . a t ( cad . s i z e ( ) 1)!= # ) 26 f s << mal << e n d l ; 27 else 28 { 29 int sw=t r u e ; 30 s t r i n g num = cad . s u b s t r ( 1 , 3 ) ; 31 f or ( int j =0; j < 3; j ++) 32 i f ( ( num . a t ( j ) < 0 ) | | (num . a t ( j )> 9 ) ) { 33 sw=f a l s e ; 34 break ; 35 } 36 i f ( sw ) 37 num = cad . s u b s t r ( 5 ) ; 38 f or ( int j =0; j <num . l e n g t h ( ) 1; j ++) 39 i f ( ( num . a t ( j ) < 0 ) | | (num . a t ( j )> 9 ) ) { 40 sw=f a l s e ; 41 break ; 42 } 43 i f ( sw ) 44 f s << b i e n << e n d l ; 45 else 46 f s << mal << e n d l ; 47 } 48 49 } 50 51 52 return 0 ; 53 }
www.icpc-bolivia.edu.bo
73
Entrada
Los datos consisten de varios datos de prueba. La primera linea contiene el n umero de casos de prueba N C por cada caso de prueba se tiene en la primera l nea de cada caso de prueba, N el n umero de cuentas del collar, en la segunda l nea se se tiene en digitos que son los n umeros que tiene cada una de las 0 N 9 cuentas del collar. Seguidamente viene un numero K N que indica el tama no del palindrome que queremos hallar.
Salida
El n uumero de caso, Si, o No, existe un palindrome de tama no K. Ejemplos de entrada 2 3 1 2 2 3 3 1 2 3 2 Ejemplos de salida Caso 1: SI Caso 2: NO
www.icpc-bolivia.edu.bo
74
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
#define DEBUGs #i f n d e f NDEBUG #d e f i n e DBG( a ) cout << LINE << : <<#a<<= <<a<<e n d l ; #e l s e #d e f i n e DBG( a ) ; #endif #include < i o s t r e a m > #include < c s t d i o > #include < c s t r i n g > #include < s t r i n g > #include < v e c t o r > #include < a l g o r i t h m > #include < c s t r i n g > #include < c a s s e r t > #include <cmath> #include < f s t r e a m > #define f o r e a c h ( IT ,C) f or ( t y p e o f (C. b e g i n ( ) ) IT=C. b e g i n ( ) ; IT!=C. end ( ) ; IT++) u s i n g namespace s t d ; o f s t r e a m f s ( s a l i d a c o l l a r . out ) ; ifstream fe ( c o l l a r . in ) ; b o o l palindrome ( v e c t o r <int > vc ) { int a = 0 , b = vc . s i z e ( ) 1; while ( a < b ) { i f ( vc [ a ] != vc [ b ] ) return f a l s e ; a++;b; } return t r u e ; } bool resuelva () { int l e n , x , k ; f e >> l e n ; v e c t o r <int > vc ( l e n ) ; f or ( int i =0; i < l e n ; i ++){ f e >> vc [ i ] ; } f e >> k ; f or ( int i =0; i < l e n ; i ++){ v e c t o r <int > p a l ; f or ( int j =0; j <k ; j ++){ p a l . push back ( vc [ ( i + j ) % len ] ) ;
www.icpc-bolivia.edu.bo
75
50 } 51 i f ( palindrome ( p a l ) ) 52 return t r u e ; 53 } 54 return f a l s e ; 55 } 56 int main ( ) { 57 int nc ; 58 f e >> nc ; 59 f or ( int i =1; i <=nc ; i ++){ 60 f s << Caso << i << : ; 61 if ( resuelva () ) 62 f s << SI << e n d l ; 63 else 64 f s << NO << e n d l ; 65 } 66 }
www.icpc-bolivia.edu.bo
76
Problema - Nidito
DEBE LEER LOS DATOS DE nidito.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-nidito.out Buscando el nido especial est an dos pajaritos. Pues dir as cu al es el problema?, y la respuesta es que estos pajaritos tienen requerimientos muy exquisitos del lugar donde quieren vivir. Ellos son dos p ajaritos de cuello azul y les gustar a vivir en la zona que haya m as pajaritos azules y por supuesto siempre y cuando exista un nidito libre. Para ello la pajarita ha conseguido un plano de la ubicaci on de los nidos libres y los vecinos que circundan esos nidos. El plano es rectangular en el que los nidos libres se especican con un * y la cualidad de los pajaritos con un letra, que es la inicial del color del pajarito vecino, es asi que: A especica al color AZUL, V al VERDE y asi...... debes considerar que no es posible que dos colores distintos sean explicados con la misma letra. Debes ayudar a estos pajaritos a hallar su nido perfecto, el que esta rodeado de la mayor cantidad pajaritos azules.!!! Minimo debe tener tres pajaritos azules como vecinos. En caso de no encontrar el nido perfecto debes mostrar 0 0.
Entrada
La entrada consiste de un n umero entero c que indica la cantidad de casos. Por cada caso se tiene m y n (2 m, n 20) que indican el tama no de la regi on en la cual se buscar a el nido. En seguida, le siguen m l neas con cadenas de hasta n caracteres en may uscula, que indican los nidos ocupados o libres que hay en la regi on.
Salida
La salida son dos n umeros enteros x,y, que indican la ubicaci on del nido perfecto. Ex caso de que exista mas de un nido perfecto, debe mostrar el que tenga la la y columna m as cecana a la cordenanda (1, 1)
www.icpc-bolivia.edu.bo
77
Ejemplos de entrada 2 13 16 AAA*VVVVVNNNN*NN AAVVV*VVVVVVVAAA AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAA VVVVVVVVVVVVVVVV VVVVVVVV*VVVVAAA VVV*VVVVVVVVVAAA VVVVVVVVVVVVVAAA AAAAAAAAVAAAVAAA AAAAA*AAVAAAVAAA AAAVAAAAVAAAVAAA AAAAAAAAVAAVVV*V VVVAAAAAVAVVVAAA 3 3 AAA VVV *VV
Ejemplos de salida 10 6 0 0
www.icpc-bolivia.edu.bo
78
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
f e >> m >> n ; s t r i n g mat [m] ; f or ( int j = 0 ; j < m; j ++) f e >>mat [ j ] ; int n i d o s [m+ 2 ] [ n + 2 ] ; // c a n t i d a d de n i d o s char n i d o s 2 [m+ 2 ] [ n + 2 ] ; // d a t o s de e n t r a d a como c a r a c t e r e s // poner c e r o s a l a s m a t r i c e s f or ( int i = 0 ; i < m+2; i ++) f or ( int j = 0 ; j < n+2; j ++) nidos [ i ] [ j ]=0; // s e p a r a r por c a r a c t e r e s f or ( int i = 0 ; i < m; i ++) f or ( int j = 0 ; j < n ; j ++) n i d o s 2 [ i + 1 ] [ j +1]=mat [ i ] . a t ( j ) ; // c o n t a r n i d o s v e c i n o s hay 8 v e c i n o s f or ( int i = 1 ; i <= m; i ++) f or ( int j = 1 ; j <= n ; j ++) i f ( n i d o s 2 [ i ] [ j ]== ) { i f ( n i d o s 2 [ i 1 ] [ j 1]== A ) n i d o s [ i ] [ j ]++; i f ( n i d o s 2 [ i 1 ] [ j ]== A ) n i d o s [ i ] [ j ]++; i f ( n i d o s 2 [ i 1 ] [ j +1]== A ) n i d o s [ i ] [ j ]++; i f ( n i d o s 2 [ i + 1 ] [ j 1]== A ) n i d o s [ i ] [ j ]++; i f ( n i d o s 2 [ i + 1 ] [ j ]== A ) n i d o s [ i ] [ j ]++; i f ( n i d o s 2 [ i + 1 ] [ j +1]== A ) n i d o s [ i ] [ j ]++; i f ( n i d o s 2 [ i ] [ j 1]== A ) n i d o s [ i ] [ j ]++; i f ( n i d o s 2 [ i ] [ j +1]== A ) n i d o s [ i ] [ j ]++; } // imprimir e l primer n i do d i s p o n i b l e int sw=0; int max =0, maxi =0,maxj =0; f or ( int i = 1 ; i <= m; i ++){ f or ( int j = 1 ; j <= n ; j ++) i f ( n i d o s [ i ] [ j ] > 3) { i f ( n i d o s [ i ] [ j ] > max) { max=n i d o s [ i ] [ j ] ; maxi=i ; maxj=j ; } } } f s << maxi << << maxj << e n d l ; } }
www.icpc-bolivia.edu.bo
79
Problema - Tetris
Bob le gusta jugar al Tetris (Un v deo juego de piezas llamadas tetriminos, cada tetrimino esta compuesto de cuatro cubos. Cada tetrimino cae aleatoriamente) El objetivo del juego es manipular estos tetriminos movi endolos o rotando los 90 grados y llenar una l nea o varias l neas horizontales en la base de la matriz. Cuando una l nea horizontal es llenada entonces esta desaparece. Mientras Bob jugaba se le ocurri o una idea y fue calcular la supercie que forma todos los cubos en el juego (Puedes suponer que cada cubo tiene un area de 1x1x1 y una supercie de 6, por las 3 caras que tiene). Bob tiene dicultades al calcular esta supercie as que pidi o tu ayuda para ello. Tu trabajo es calcular la supercie formada por los cubos en 3D. Para entender mejor el enunciado, analicemos los ejemplos de entrada presentados. En el primer ejemplo, existen dos columnas, una con cero cubos y otra con un cubo. Como cada cubo tiene una supercie total de 6 la respuesta es 6. En el segundo ejemplo tenemos 0, 2, 3, 3, 2, 0, 0, 0, 0, 1 el total de cubos es 11. Cuando dos cubos tienen dos cara comunes la supercie total es 10, dado que hay dos caras que no se ven. Horizontalmente existen 7 caras comunes. y verticalmente 6 caras comunes. De esto vemos que 6 11 7 2 6 2 = 40. En el tercer caso en los ejemplos de entrada es 0, Cada vez que se encuentra una l nea horizontal llena de cubos se elimina.
Entrada
La entrada contiene varios casos de prueba, La primera l nea contiene el numero de casos de prueba. La primera linea de cada caso de prueba contiene un entero n (2 n 20), donde n representa el numero de columnas de la matriz. Las siguiente l nea contiene n enteros hi (0 hi 100) donde representa la altura de cada columna de la matriz (compuesta de cubos).
Salida
Para cada entrada se debe imprimir un entero con el valor de la supercie calculada en la matriz
www.icpc-bolivia.edu.bo
80
Ejemplos de entrada 3 2 1 0 10 0 2 3 3 2 0 0 0 0 1 3 1 1 1
Ejemplos de salida 6 40 0
www.icpc-bolivia.edu.bo
81
35 36 37 38 39 40 41 } 42 int 43 44 45 46 47 48 49 }
min heigth ) ) ; } h e i g h t [ h e i g h t . s i z e ( ) 1] = m i n h e i g t h ; i f ( h e i g h t [ h e i g h t . s i z e ( ) 1] > 0 ) { s u m a s u r f a c e += h e i g h t [ h e i g h t . s i z e ( ) 1] 3 + 2 ; } f s << ( s u m a s u r f a c e + a d i t i o n a l 2) << e n d l ; main ( ) { int c a s o s =0; f e >> c a s o s ; f or ( int i =0; i < c a s o s ; i ++){ f e >> n ; resolve () ; }
www.icpc-bolivia.edu.bo
82
Input
La entrada contiene m ultiplos casos de entrada. La primera linea tiene el numero de casos de prueba. Cada caso de prueba contiene 4 lineas. Cada l nea contienen un numero de cuatro digitos en representaci on Maya.
Output
Imprima en una linea el equivalente decimal del numero Maya.
www.icpc-bolivia.edu.bo
83
www.icpc-bolivia.edu.bo
84
25 26 27 28 29 30 31 32 33 34 } 35 }
i f ( maya [ j ]== ) c i n c o s ++; i f ( maya [ j ]== . ) unos++; } d [ i ]=( c i n c o s 5+unos ) ; } d e c i m a l=d [ 3 ] + d [ 2 ] 2 0 + d [ 1 ] 2 0 2 0 + d [ 0 ] 2 0 2 0 2 0 ; f s << d e c i m a l << e n d l ;
www.icpc-bolivia.edu.bo
85
Input
No se tienen datos de entrada.
Output
Imprima en una linea el cuantos n umeros de la suerte existen menores a 1, 000. Ejemplo muestra la cantidad de numeros menor a 100. Ejemplos de entrada Ejemplos de salida 23
www.icpc-bolivia.edu.bo
86
www.icpc-bolivia.edu.bo
87
Input
La primera linea contiene el numero de casos de prueba. Las linea siguientes contienen un caso de prueba consistente en el numero (2 n 1, 000) de dulces.
Output
Por cada caso de prueba imprima en una linea la posici on donde se encuentra el dulce m agico. Ejemplos de entrada 4 5 9 20 1 Ejemplos de salida 5 7 17 1
www.icpc-bolivia.edu.bo
88
23 24 25 26 27 28 }
www.icpc-bolivia.edu.bo
89
Input
La entrada contiene m ultiplos casos de entrada. La primera linea tiene el numero de casos de prueba. Cada caso de prueba contiene un numero 7 p 10000
Output
Por cada caso de prueba imprima en una linea los tres n umeros primos separados por un espacio. Ejemplos de entrada 4 31 61 71 7 Ejemplos de salida 3 3 2 2 5 5 2 2 23 53 67 3
www.icpc-bolivia.edu.bo
90
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
v e c t o r <int > l i s t a P r i m o s ; int primos [ 1 0 0 0 0 0 0 ] ; int r e s p [ 3 ] ; void h a l l a r P r i m o s ( int p ) { f or ( int i = 0 ; ( i < l i s t a P r i m o s . s i z e ( ) ) ; i ++) { f or ( int j = 0 ; ( j < l i s t a P r i m o s . s i z e ( ) ) ; j ++) { f or ( int k = 0 ; k < l i s t a P r i m o s . s i z e ( ) ; k++) { i f ( ( l i s t a P r i m o s [ i ]+ l i s t a P r i m o s [ j ]+ l i s t a P r i m o s [ k ] )==p ) { resp [0]= listaPrimos [ i ] ; resp [1]= listaPrimos [ j ] ; resp [2]= listaPrimos [ k ] ; return ; } i f ( ( l i s t a P r i m o s [ i ]+ l i s t a P r i m o s [ j ]+ l i s t a P r i m o s [ k ] ) > p ) break ; } i f ( ( l i s t a P r i m o s [ i ]+ l i s t a P r i m o s [ j ] ) > p ) break ; } i f ( ( l i s t a P r i m o s [ i ] )> p ) break ; } } main ( ) { f or ( int i = 0 ; i < tmax ; i ++) primos [ i ] = 0 ; f or ( int i = 2 ; i < tmax ; i ++) { i f ( ! primos [ i ] ) l i s t a P r i m o s . push back ( i ) ; f or ( int j = i+i ; j < tmax ; j+=i ) { primos [ j ] = 1 ; } } int w; f e >> w; f or ( int i =0; i <w; i ++){ int p ; f e >> p ; resp [0]=0; resp [1]=0; resp [2]=0; hallarPrimos (p) ; f s << r e s p [ 0 ] << << r e s p [ 1 ] << << r e s p [ 2 ] << e n d l ; } }
www.icpc-bolivia.edu.bo
91
Input
La primera linea contiene un numero que indica el numero de casos de prueba. En una linea viene un caso de prueba que contiene un numero 10 n 1000 que es la multiplicaci on de las tres edades.
www.icpc-bolivia.edu.bo
92
Output
Por cada caso de prueba su programa debe escribir si no existe una soluci on. Un s mbolo de suma + para indicar que existen m ultiples soluciones y en caso de existir una soluci on u nica, como en el ejemplo, debe imprimir las edades de las tres hijas de Mar a. Ejemplos de entrada 4 72 30 288 100 Ejemplos de salida 3 3 8 * + *
18 19 u s i n g namespace s t d ; 20 21 c l a s s Datos { p u b l i c : 22 int a , b , c , s ; 23 24 Datos ( ) {} 25 Datos ( int i , int j , int k ) { 26 a=i ; b=j ; c=k ; s=a+b+c ; 27 } 28 } ;
www.icpc-bolivia.edu.bo
93
29 30 b o o l comp ( Datos a , Datos b ) { 31 return a . s < b . s ; 32 } 33 34 int main ( ) { 35 int c a s o s , n ; 36 scanf ( % d ,& c a s o s ) ; 37 f or ( int c1 = 0 ; c1 < c a s o s ; c1++) { 38 scanf ( % d ,&n ) ; 39 40 Datos p o s i b l e s [ n / 2 ] ; 41 int l =0; 42 f or ( int i = 1 ; i <= s q r t ( n ) ; i ++) { 43 f or ( int j = i ; j <= n ; j ++) { 44 f or ( int k = j ; k <= n ; k++) { 45 i f ( i j k==n ) { 46 int s=i+j+k ; 47 p o s i b l e s [ l ] = Datos ( i , j , k ) ; 48 l ++; 49 } 50 } 51 } 52 } 53 54 s o r t ( p o s i b l e s , p o s i b l e s+l , comp ) ; 55 56 int ant=p o s i b l e s [ 0 ] . s , q=0; 57 int qs =0, r i =0, r j =0, rk =0; 58 f or ( int i = 0 ; i < l ; i ++) { 59 i f ( ant==p o s i b l e s [ i ] . s ) { 60 q++; 61 } 62 else { 63 i f ( q > 1) { // b u s c a r una s o l u c i o n 64 int l 1 =0; 65 Datos s o l u c i o n e s [ q ] ; 66 f or ( int j = 0 ; j <q ; j ++) { 67 i f ( p o s i b l e s [ i 1 j ] . c > p o s i b l e s [ i 1 j ] . b ) { 68 s o l u c i o n e s [ l 1 ]= Datos ( p o s i b l e s [ i 1 j ] . a , p o s i b l e s [ i 1 j ] . b , p o s i b l e s [ i 1 j ] . c ) ; 69 l 1 ++; 70 } 71 } 72 f or ( int j = 0 ; j < l 1 ; j ++){ 73 r i=s o l u c i o n e s [ j ] . a ; 74 r j=s o l u c i o n e s [ j ] . b ;
www.icpc-bolivia.edu.bo
94
75 rk=s o l u c i o n e s [ j ] . c ; 76 77 qs++; 78 } 79 } 80 81 q=1; 82 ant=p o s i b l e s [ i ] . s ; 83 } 84 } 85 i f ( qs > 1) 86 p r i n t f ( +\n ) ; 87 else 88 i f ( qs==0) 89 p r i n t f ( \ n ) ; 90 else 91 printf ( % d % d % d \ n , r i , r j , rk ) ; 92 } 93 }
www.icpc-bolivia.edu.bo
95
Entrada
La primera l nea tendri a un n umero N, que es la cantidad de casos de prueba. Seguido de N l neas, En cada l nea se vienen dos cadenas con las representaciones binarias separadas por un espacio. Cada cadena tendri a entre 1 y 50 caracteres, inclusive. Todos los elementos de n umeros contendr n solo los caracteres 1 y 0.
Salida
La salida consiste en una l nea para cada caso de prueba que contiene la distancia Hamming. Ejemplos de entrada 3 11010 01100 10000001 10000001 11111111 00000000 Ejemplos de salida 3 0 8
www.icpc-bolivia.edu.bo
96
12 int main ( ) 13 { 14 int N, i , j , c n t ; 15 string a , b; 16 17 c i n >> N; 18 f or ( i =0; i <N; i++ ) 19 { 20 c i n >> a >> b ; 21 cnt = 0 ; 22 f or ( j =0; j <a . l e n g t h ( ) ; j++ ) 23 { 24 i f ( a [ j ] != b [ j ] ) 25 c n t ++; 26 } 27 c o u t << c n t << e n d l ; 28 } 29 return 0 ; 30 }
www.icpc-bolivia.edu.bo
97
Entrada
La primera la tendr a un n umero N que es el n umero de datos de entrada, seguido de N l neas, cada l nea consiste de un numero entero n ? 500 un una l nea.
Salida
Por cada n umeros de entrada el numero capic ua hallado. Si no existe un imprima la palabra imposible. Ejemplos de entrada Ejemplo de entrada 2 14 95 Ejemplos de salida 55 1111
www.icpc-bolivia.edu.bo
98
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
int main ( ) { int N, i , c n t ; long A, B ; c i n >> N; f or ( i =0; i <N; i++ ) { c i n >> A; cnt = 0 ; while ( c n t < 100 ) { B = invertir ( A ) ; i f ( A == B ) { c o u t << A << e n d l ; break ; } else A = A + B; c n t ++; } i f ( c n t == 100 ) c o u t << i m p o s i b l e << e n d l ; } return 0 ; }
www.icpc-bolivia.edu.bo
99
Problema - Poema
Como cada a no, en el colegio de Jos e se organiza todo un evento por el d a de la madre. Comenzar a con un himno, coreograf as de bailes, una peque na obra de teatro, una banda de estudiantes tocar a un tema especialmente dedicado y, por u ltimo, un poema, (a cargo de Jos e). Pero, Jos e esta muy nervioso, ha hecho todo lo posible para memorizar el poema. Sus amigos decidieron ayudar a Jos e quitando todas las vocales del poema y remplazarlos por guiones, luego dejaron que Jos e lo lea para ver si realmente lo ha memorizado todo. El problema es que los amigos de Jos e quieren estar seguros de remplazarlos bien sin arruinar el poema, para lo cual decidieron hacerlo mediante un programa. Tu trabajo es ayudar a estos ni nos.
Entrada
La primera l nea tendr a un n umero entero N (0 < N < 1000) que representa el n umero de l neas que tendr a el poema. Cada l nea del poema tendr a un m aximo de 100 caracteres que contendr a: may uscula (A-Z), min uscula (a-z), espacios ( ), puntos (.) y comas (,).
Salida
En la salida se mostrar a el poema sin vocales como se muestra en el ejemplo de salida. Ejemplos de entrada 5 Creci de a poco con tu calor, me alimentaba con tus caricias y frases de amor. Con miedo de perderte... Se hizo la luz Ejemplos de salida Cr-c- d- - p-c- c-n t- c-l-r, m- -l-m-nt-b- c-n t-s c-r-c--s y fr-s-s d- -m-r. C-n m--d- d- p-rd-rt-... S- h-z- l- l-z
www.icpc-bolivia.edu.bo
100
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#include < s t d i o . h> #include <c t y p e . h> int e s V o c a l ( char ch ) { char c = t o l o w e r ( ch ) ; return ( c == a | | c== e | | c== i | | c== o | | c== u ) ; } int main ( ) { int n , i ; char l i n e [ 1 0 1 ] ; scanf ( % d \ n , &n ) ; while ( n ) { gets ( line ) ; f or ( i =0; l i n e [ i ] ; i++ ) i f ( esVocal ( l i n e [ i ] ) ) l i n e [ i ] = ; printf ( % s \ n , l i n e ) ; } return 0 ; }
www.icpc-bolivia.edu.bo
101
Entrada
La primera l nea es un entero (1 T 100) el n umero de casos de prueba.
www.icpc-bolivia.edu.bo
102
Seguidamente se te dar a un entero (1 N 100) el n umero de coordenadas x, y que te enviar a Ghost. A continuaci on vendr an N l neas, cada una de 2 valores x, y (0 x, y 1000) donde cada una representa la coordenada de una estructura Protoss. La u ltima l nea tendr a 3 valores x, y, r. Donde x, y son las coordenadas del blanco del ataque nuclear y r (1 r 500) el radio de alcance de la bomba Nuclear.
Salida
Para cada caso de prueba imprimir el n umero de estructuras Potross destruidas por la bomba Nuclear (Una estructura ser a destruida si la coordenada de la estructura Protoss est a en el radio de alcance de la Bomba Nuclear) Ejemplos de entrada 3 2 1 1 1 0 0 0 1 2 1 1 1 0 0 0 5 2 0 0 50 50 5 5 10 Ejemplos de salida 1 2 1
www.icpc-bolivia.edu.bo
103
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
double xx = ( a . f i r s t b . f i r s t ) ( a . f i r s t b . f i r s t ) ; double yy = ( a . second b . second ) ( a . second b . second ) ; return s q r t ( xx + yy ) ; } void r e s o l v e ( ) { v e c t o r <p a i r <double , double> > e s t r u c t u r a s ; int n ; scanf ( % d , &n ) ; f or ( int i =0; i <n ; i ++) { double x , y ; c i n >> x >> y ; e s t r u c t u r a s . push back ( make pair <double , double >(x , y ) ) ; } p a i r <double , double> bombaNuclear ; double r a d i o ; c i n >> bombaNuclear . f i r s t >> bombaNuclear . second >> r a d i o ; // R e v i s a r t o d o s l o s p u n t o s x , y int r e s = 0 ; f or ( int i =0; i < e s t r u c t u r a s . s i z e ( ) ; i ++) { double d i s t = d i s t a n c i a ( e s t r u c t u r a s [ i ] , bombaNuclear ) ; i f ( d i s t a n c i a ( e s t r u c t u r a s [ i ] , bombaNuclear ) <= r a d i o ) { r e s ++; } } printf ( % d \ n , r e s ) ; } int main ( ) { scanf ( % d , &t ) ; f or ( int i =0; i <t ; i ++) resolve () ;
www.icpc-bolivia.edu.bo
104
Entrada
La primera l nea contendr a un entero N (1 N 10) el n umero de casos de prueba. A continuaci on se te dar a N l neas, cada una con una cadena (solo may usculas), donde cada car acter representa la letra disponible para armar la palabra BOLIVIA.
Salida
Para cada cadena que se te dio anteriormente, si es posible armar la palabra BOLIVIA imprimir ?ES POSIBLE?, caso contrario ?NO ES POSIBLE?. Ejemplos de entrada 3 BOLIVIA BOOIILVA BOLVZATY Ejemplos de salida ES POSIBLE ES POSIBLE NO ES POSIBLE
www.icpc-bolivia.edu.bo
105
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#include < s t r i n g > u s i n g namespace s t d ; int main ( ) { int N, i , j ; string linea ; int B, O, L , I , V, A; c i n >> N; f or ( i =0; i <N; i++ ) { c i n >> l i n e a ; B = O = L = I = V = A = 0; f or ( j =0; j < l i n e a . l e n g t h ( ) ; j++ ) { switch ( l i n e a [ j ] ) { case B : B++; break ; case O : O++; break ; case L : L++; break ; case I : I ++; break ; case V : V++; break ; case A : A++; break ; } } i f ( B<1 | | O<1 | | L<1 | | I <2 | | V<1 | | A<1 ) c o u t << NO ES POSIBLE << e n d l ; else c o u t << ES POSIBLE << e n d l ; } return 0 ; }
www.icpc-bolivia.edu.bo
106
Dada una posible locaci on de las explosiones, determinar cual es el area total cubierta por las explosiones. En la gura se puede ver que el area de las 4 explosiones es de 30 (unidades cuadradas).
Entrada
La entrada comienza con un n umero NC, el n umero de casos de prueba. Por cada caso de prueba: El n umero N (1 N 100) de bombas rectangulares. A continuaci on, siguen N l neas, cada una con la descripci on de un rect angulo. La descripci on consiste en 4 n umeros enteros ax, ay, bx, by que representan 2 puntos a, b: las esquinas inferior izquierda y superior derecha respectivamente, 0 ax < bx 1000000 0 ay < by 1000. Todos los rect angulos son v alidos (no existir an rect angulos de area cero).
Salida
Por cada caso de entrada, imprimir el n umero de caso seguido del n umero m aximo de zombies que se pueden destruir con los disparos del ca n on laser.
www.icpc-bolivia.edu.bo
107
Ejemplos de salida Caso Caso Caso Caso #1: #2: #3: #4: 1 4 7 2499998
www.icpc-bolivia.edu.bo
108
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
v e c t o r <Rectangle > r e c ; v e c t o r <P > vc ; const int oo = 1 0 0 0 0 0 0 0 ; int s u m a i n t e r v a l o s ( ) { a s s e r t ( vc . s i z e ( ) > 0 ) ; int r e s = 0 ; vc . push back (P( oo , oo ) ) ; // ordena primero por f i r s t , l u e g o por second s o r t ( vc . b e g i n ( ) , vc . end ( ) ) ; int a = vc [ 0 ] . f i r s t , b = vc [ 0 ] . second ; f or ( int i =1; i <vc . s i z e ( ) ; i ++) { i f ( b < vc [ i ] . f i r s t ) { r e s += ( b a ) ; a = vc [ i ] . f i r s t ; b = vc [ i ] . second ; } else { b = max( b , vc [ i ] . second ) ; } } return r e s ; } b o o l e s t a e n y ( int y , int r ) { return r e c [ r ] . ay <= y and }
y < r e c [ r ] . by ;
int a r e a e n y ( int y ) { int r e s = 0 ; vc . c l e a r ( ) ; f or ( int i =0; i <n ; i ++) i f ( esta en y (y , i ) ) vc . push back (P( r e c [ i ] . ax , r e c [ i ] . bx ) ) ; i f ( vc . empty ( ) ) return 0 ; return s u m a i n t e r v a l o s ( ) ; }
www.icpc-bolivia.edu.bo
109
int r e s u e l v a ( ) { scanf ( % d , &n ) ; rec . r e s i z e (n) ; f or ( int i =0; i <n ; i ++) { scanf ( % d % d % d % d , &r e c [ i ] . ax , &r e c [ i ] . ay , &r e c [ i ] . bx , &r e c [ i ] . by ) ; a s s e r t ( r e c [ i ] . ax <= r e c [ i ] . bx ) ; a s s e r t ( r e c [ i ] . ay <= r e c [ i ] . by ) ; } int r e s = 0 ; f or ( int y=0;y < =1000;y++) r e s += a r e a e n y ( y ) ; return r e s ; } int main ( ) { int nc ; scanf ( % d , &nc ) ; f or ( int i =1; i <=nc ; i ++) p r i n t f ( Caso # % d: % d \ n , i , r e s u e l v a ( ) ) ; }
www.icpc-bolivia.edu.bo
110
Problema - Angulos
Como responsable de una parte de un sistema de geometr a te ha pedido que determinar si hay angulos rectos. Te dan tres puntos en el plano que forman un triangulo. Lo que debes decir es si hay un angulo recto en el tri angulo que se forma.
Entrada
La entrada consiste de varios casos de prueba, la primera l nea contiene el n umero de casos n. Por cada caso se tiene una l nea con las coordenadas de los tres puntos X, Y, Z que forman un tri angulo. Cada punto tiene dos enteros con las coordenadas del eje (1000 x, y 1000). Todos los n umeros caben en una variable entera.
Salida
Imprima una l nea con el texto SI cuando uno de los 3 angulos es recto y NO cuando ninguno es un angulo recto. Ejemplos de entrada 4 -4 -4 -4 -4 -5 -4 -3 -2 8 3 8 5 0 3 7 7 -5 -5 -5 -5 -3 -3 -2 -1 Ejemplos de salida NO SI NO SI
www.icpc-bolivia.edu.bo
111
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
typedef long punto [DIM ] ; u s i n g namespace s t d ; b o o l r e c t o ( punto A, punto B, punto C ) { punto V1 , V2 ; // En r e a l i d a d e s t o e s un v e c t o r : D V1 [ x ] = B [ x ] A[ x ] ; V1 [ y ] = B [ y ] A[ y ] ; V2 [ x ] = C[ x ] A[ x ] ; V2 [ y ] = C[ y ] A[ y ] ; return (V1 [ x ] V2 [ x ] + V1 [ y ] V2 [ y ] ) == 0 ; } int main ( ) { int N, i ; punto A, B, C; c i n >> N; f or ( i =0; i <N; { c i n >> A[ x ] c i n >> B [ x ] c i n >> C[ x ]
i f ( r e c t o (A, B,C) | | r e c t o (B, C,A) | | r e c t o (C, A, B) ) c o u t << SI << e n d l ; else c o u t << NO << e n d l ; } return 0 ; }
www.icpc-bolivia.edu.bo
112
Entrada
La primera l nea contiene un n umero N que son casos de prueba. Cada caso de prueba es una cadena en una l nea. La cadena contiene entre 1 y 50 caracteres. Cada car acter ser a <, >, , =. La entrada termina cuando no hay m as datos.
Salida
Por cada caso de prueba escriba en una l nea la longitud de la cadena m as larga. Si no existe una cadena escriba -1. Ejemplos de entrada 4 <--->--==> <<<<<<<<<< ----==<----=====> Ejemplos de salida 4 1 -1 6
www.icpc-bolivia.edu.bo
113
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
u s i n g namespace s t d ; int main ( ) { int N, i , j , k ; string linea ; c i n >> N; f or ( k=0; k<N; k++ ) { c i n >> l i n e a ; int tam = l i n e a . l e n g t h ( ) , max=1; f or ( i =0; i <tam ; i++ ) { i f ( l i n e a [ i ] == < ) { f or ( j = i + 1 ; j < tam && l i n e a [ j max = MAX(max , j i ) ; f or ( j = i + 1 ; j < tam && l i n e a [ j max = MAX(max , j i ) ; } e l s e i f ( l i n e a [ i ] == > ) { f or ( j = i 1 ; j >= 0 && l i n e a [ j ] max = MAX(max , i j ) ; f or ( j = i 1 ; j >= 0 && l i n e a [ j ] max = MAX(max , i j ) ; } } c o u t << max << e n d l ; } return 0 ; }
] == ; j ++) ; ] == = ; j ++) ;
== ; j ) ; == = ; j ) ;
www.icpc-bolivia.edu.bo
114
www.icpc-bolivia.edu.bo
115
Votaci on - Jorge Teran Apostando - Jorge Teran Estrategia para apostar - Jorge Teran Promedios M oviles - Jorge Teran Conservaci on - Jorge Teran M ultiplo Peque no - Jorge Teran Siempre Solo - Alvaro Rojas La nueva pieza de ajedrez - Alvaro Rea Apostando - Jorge Teran Votaci on - Jorge Teran Codigo de Vericaci on - Jorge Teran Cuando Ver Pel culas - Edwin Guzman Soluciones - Jorge Teran Cambio Hora - Jorge Teran Desbloqueando Bloqueos - Jorge Teran Diatancia de Hamming - Jorge Teran Numeros Capicuas - Jorge Teran Poema - Alberto Suxo La u ltima Esperanza - Alvaro Rojas Bolivia Word - Alvaro Rojas La gran bomba de explosi on extra na de destrucci on masiva Z - Gabriel Rea Angulos - Jorge Teran Flecha - Jorge Teran