Sei sulla pagina 1di 118

Olimipiada de Inform atica

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.

76 79 82 85 87 89 91 95 97 99 101 104 106 110 112

22 de agosto de 2012

www.icpc-bolivia.edu.bo

Problema - Buscando el Diez


A usted le dan todas las notas que ha obtenido en una clase. Cada nota est a entre 0 y 10 inclusive. Asumiendo que en todas sus pr oximas tareas obtendr a un 10, determine el n umero de tareas necesarias para obtener un 10. Usted recibir a un 10 si su promedio es 9,5 o superior. Por ejemplo si sus notas son 8, 9 entonces requerir a 4 tareas adicionales en las que tendr a que sacar 10. Con cada tarea su promedio se aumentar a a 9, 9,25, 9,4 y 9,5.

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

Programa que resuelve el problema


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 < s t r i n g > #include < c s t d l i b > u s i n g namespace s t d ; int main ( ) { string line ; g e t l i n e ( cin , l i n e ) ; double promedio = 0 . 0 , t o t a l = 0 . 0 ; int c o n t a d o r = 0 ; line = line + , ; int mat ; f or ( mat=0; l i n e . l e n g t h ( ) > 0; mat++ ) { t o t a l += a t o f ( l i n e . s u b s t r ( 0 , l i n e . f i n d ( , ) ) . c s t r ( ) ) ; l i n e = l i n e . s u b s t r ( l i n e . f i n d ( )+1 ) ; } promedio = t o t a l / ( double ) mat ; i f ( promedio >= 9 . 5 ) { c o u t << 0 << e n d l ; } else { while ( promedio < 9.5) { t o t a l +=10.0; mat++; c o n t a d o r ++; promedio = t o t a l / ( double ) mat ; } cout << c o n t a d o r << e n d l ; } }

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

La respuesta que debes entregar es: 3

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 #include < i o s t r e a m > #include < s t r i n g > u s i n g namespace s t d ; int main ( ) { s t r i n g X; c i n >> X;

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.

Programa que resuelve el problema


1 #include < i o s t r e a m > 2 u s i n g namespace s t d ; 3 4 int main ( ) { 5 int min , max , f a c t o r ; 6 int r e s , i ;

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

Problema - Rect angulo mas grande


El peque no Jos e ha encontrado muchos palitos que son de 1 cent metro de largo. El quiere hacer un rect angulo con la mayor area posible, utilizando los palitos como per metro. Se le est a permitido juntar dos palitos, pero no se le permite romper los palitos en unos m as peque nos. Por ejemplo si Jos e tiene 11 palitos puede crear el puede construir un rect angulo de 2 x 3 utilizando 10 palitos. Este rect angulo tiene una supercie de 6 cent metros cuadrados, que es la mayor area que puede formar. Dado el n umero de palitos, halle el area del rect angulo m as grande que puede formar.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include #include #include #include <i o s t r e a m > <v e c t o r > <s t r i n g > <math . h>

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

Problema - Carga Cajas


Su empresa ha comprado un nuevo robot para cargar cajas. Su tarea es programar el robot para empacar los items en cajas para el embarque. El robot tienen muy poca memoria as que esta restringido a colocar los items en las cajas todos en la misma orientaci on. Cada item es rectangular y solido con dimensiones itemX itemY itemZ . La caja tambi en es rectangular con dimensiones cajaX cajaY cajaZ . Los items se pueden acomodar en la caja en cualquier posici on ortogonal. Esto signica que los lados de los items deben ser paralelos a los lados de las cajas. Solo se pueden colocar items completos en una caja. Su tarea es determinar el m aximo n umero de cajas de items que puede colocar en una caja. Todos los items con la misma direcci on. Por ejemplo si la caja es de 100x98x81 y los items de 3x5x7 entonces orientando los items para que sean 5x7x3 permite acomodar 7560 items.

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

Programa que resuelve el problema


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 31 32 33 34 35 #include #include #include #include <i o s t r e a m > <v e c t o r > <s t r i n g > <cmath>

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

Problema - Sumando Digitos


Comenzando con un entero entre 00 y 99 inclusive, escritos como dos d gitos (use un cero a la izquierda en caso de que el numero sea menor que 10). Realice los siguiente: 1. Sume los dos d gitos. 2. Ahora conc entrese en el d gito de la derecha, en el n umero original y en el de la suma. 3. Finalmente combine estos n umeros. Si repetimos este proceso varias veces obtenemos el n umero original.. Por ejemplo Inicio Sume los dos d gitos Combine los dos d gitos -----------------------------------------------------26 : 2+6 = 08 : "6" y "8" = 68 68 : 6+8 = 14 : "8" y "4" = 84 84 : 8+4 = 12 : "4" y "2" = 42 42 : 4+2 = 06 : "2" y "6" = 26 En este caso tomo 4 pasos para obtener el n umero original. Se pide que devuelva el n umero de pasos requeridos para obtener el n umero original.

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.

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include < i o s t r e a m > #include < v e c t o r > u s i n g namespace s t d ; int main ( ) { int count = 1 ; int s t a r t ; c i n >> s t a r t ; int n=s t a r t ; f or ( ; ; count++) { int m = n/10 + n %10; n = ( n %10) 10 + m%10; i f ( n == s t a r t ) { cout << count << e n d l ; break ; } } }

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

La respuesta que debes entregar es: 147

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.

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include < i o s t r e a m > #include < v e c t o r > u s i n g namespace s t d ; b o o l come ( int v1 , int v2 ) { return ( v1>=v2 2 && v1<=v2 10) ; } int main ( ) { int n=0, tamMin=0,tamMax=0; c i n >>tamMax ; c i n >>n ; int pez [ n ] ; f or ( int i = 0 ; i <n ; i ++) c i n >>pez [ i ] ; int i , j , r e s p u e s t a =0; f or ( i=tamMin ; i <=tamMax ; i ++) {

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

Programa que resuelve el problema


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 #include < i o s t r e a m > #include < v e c t o r > u s i n g namespace s t d ; int c o n t a r ( int rama , int d escan so , int h o j a s ) { int c t = 0 ; int i = 0 ; f or ( ; ; ) { i f ( i > rama ) { return c t ; } i f ( i % h o j a s == 0 ) c t++ ; i += d e s c a n s o ; } } int main ( ) { int rama , d escan so , h o j a s ; c i n >> rama ; c i n >> d e s c a n s o ; c i n >> h o j a s ; c o u t << ( c o n t a r ( rama , d escan so , h o j a s ) ) << e n d l ; }

www.icpc-bolivia.edu.bo

19

Problema - Apariencia triangular


Se puede contornear un tri angulo rect angulo en base a puros asteriscos. Para ello se requiere de la altura y base del tri angulo. Hay que tener cuidado que s olo funciona para tri angulos rect angulos perfectos, es decir que se pueda mostrar con esos datos de forma correcta. En caso de que el tri angulo no cumpla esta condici on de perfecci on, entonces debe mostrar un mensaje No posible. Encuentra la condici on para que un tri angulo sea perfecto y realiza el proceso que permita decidir si es posible o no al tri angulo mostrarse. Por ejemplo: Si el tri angulo tiene altura 4 y base 3, es posible mostrar, y el contorno ser a: * * * * * * * * por lo que la respuesta ser a: Si posible. Pero si el tri agulo tiene altura 5 y base 3 no se puede mostrar, por lo que la respuesta es No posible.

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.

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <i o s t r e a m > u s i n g namespace s t d ; int main ( ) { int a l t u r a , b ase ; c i n >> a l t u r a ; c i n >>b ase ; // ( base 1) 2 2 i f ( ( 2 base 4) == a l t u r a 2 ) cout << S i p o s i b l e << e n d l ; else cout <<No p o s i b l e << e n d l ; return 0 ; }

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 entrada Ejemplo 3 4 0 1 2 2 2 2 0 1 Ejemplo 3 3 0 2 2 2 0 1 Ejemplo 2 2 0 1 1 0 Ejemplo 5 4 4 3 1 0 2 2 3 3 de entrada 1

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.

Programa que resuelve el problema


1 #include < i o s t r e a m > 2 #include < a l g o r i t h m > 3 #define MAX 1000

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

Programa que resuelve el problema


1 #include < i o s t r e a m > 2 #include < a l g o r i t h m > 3 #define MAX 1000

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

Problema - Estrategia para apostar


Usted est a pensando en la siguiente estrategia para apostar, en su primera apuesta usted pone un peso. Si gana en la apuesta, gana un peso y apuesta otro peso en la siguiente apuesta. Si pierde, pierde el peso que apost o y en la siguiente vuelta apuesta 2 pesos. Si vuelve a perder apuesta 4 pesos la pr oxima vez. En otras palabra cada vez que pierde apuesta el doble de lo que apost o en la ronda anterior. Por ejemplo si comienza con 10 pesos, y gana la primera apuesta, pierde las siguientes dos apuestas y gana la u ltima apuesta. Terminara con 10 + 1 1 2 + 4 = 12 pesos. Los datos que tendr a son el dinero inicial y el detalle de las veces que gano y perdi o. La letra W signica gan o y la letra L signica perdi o. Se pide conocer el dinero que tiene despu es de apostar. Si en alg un momento, no tiene dinero para apostar con la estrategia planteada, mostrara el dinero que tiene en ese momento.

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

An alisis y Soluci on Programa que resuelve el problema

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

Problema - Promedios M oviles


Los promedios m oviles son una herramienta bien conocida en los an alisis de bonos y acciones. Se utilizan para enfatizar la direcci on de una tendencia y aplanar las uctuaciones. Los atletas utilizan promedios m oviles para analizar los resultados de su entrenamiento. Dada una lista cadena que contiene las horas de entrenamientos sucesivos y un n umero N se desea halla los N promedios m oviles para los datos de la hora. Cada elemento de la hora de entrenamiento tiene el formato HH : M M : SS horas, minutos y segundos respectivamente. Un promedio m ovil es la media aritm etica de n horas consecutivas. Dato que tenemos t registros de tiempo, se deben calcular t n + 1 promedios moviles. El primer promedio se compone de los promedios desde 1 hasta n, el segundo promedio comprende los elementos desde 2 hasta n + 1, y asi sucesivamente hasta llegar al ultimo que comprende a los elemente t n + 1 hasta t.

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;

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include < s t r i n g > #include < s t d i o . h> #include < i o s t r e a m > u s i n g namespace s t d ; int main ( ) { string str ; int n1 , n , i , k ; c i n >> n1 ; s t r i n g t [ n1 ] ; f or ( i =0; i <n1 ; i++ ) c i n >> t [ i ] ; c i n >> n ; int r e s [ n1n + 1 ] ; f or ( i =0; i <=n1n ; i ++){ int avg = 0 ; f or ( int z=i ; z<n+i ; z++){ int h , m, s ; const char t t=t [ z ] . c s t r ( ) ; s s c a n f ( tt , % d: %d: %d , &h , &m, &s ) ; avg+= h 3600+ m 60 + 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

La respuesta que debes entregar es: 4

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

Programa que resuelve el problema


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 31 32 33 34 35 #include <i o s t r e a m > #include <cmath> u s i n g namespace s t d ; int main ( ) { int r , d ; int nro , maxX, bact , x , y ; c i n >>r >>d ; nro = 2 r /d ; i f ((2 r ) % d != 0 ) nro++; i f ( nro %2 == 0 ) i f ( d %2 != 0 ) maxX = d/2 + d ( nro 1) / 2 ; else maxX = ( d / 2 ) ( nro / 2 ) ; e l s e maxX = d ( nro / 2 ) ; x = maxX ; bact = 0 ; // cout <<nro <<nro <<maxX <<maxX<< e n d l ; f or ( int i = 1 ; i <= nro ; i ++){ y = maxX ; f or ( int j = 1 ; j <= nro ; j ++){ // cout <<(<<x <<,<<y <<)<< e n d l ; i f ( s q r t ( x x + y y )< r ) b a c t++; y = y d; } x = x d; } cout <<b a c t ; return 0 ; }

www.icpc-bolivia.edu.bo

34

Problema - M ultiplo Peque no


Muchos n umeros naturales de base 10 consisten m ultiples n umeros 1 y 0. Por ejemplo el n umero once es 11, el diez 10 el ciento uno 110. Dado un numero X se desea conocer cual es el m ultiplo m as peque no de X que puede formarse exclusivamente de unos y ceros. Si X = 55 el m ultiplo m as peque no que podemos formar con unos y ceros es 101.

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

Programa que resuelve el Problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <i o s t r e a m > u s i n g namespace s t d ; typedef long long LL ; LL s o l v e (LL x ) { f or (LL i =1LL ; ; i ++){ LL y = 0LL ; f or ( int j =21; j >=0 ; j ){ y = 10LL ; i f ( ( 1 LL<< j )&i ) y++; } if (y % x == 0LL) return y ; } cout << E r r o r : ; return x ; }

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

Problema - Siempre Solo


En el pa s de Code-livia desde hace mucho tiempo exist a una mente inimaginablemente brillante tanto que decido solo juntarse con los suyos pero poco a poco se fue quedando solo su nombre es Moss. Ahora necesitamos formar un equipo para la competencia de programaci on mas prestigiosa la ACM ICPC y necesitamos encontrarlo. Sabemos que el esta solo y es diferente a los dem as. Se logro clasicar con letras a varias mentes brillantes descuerdo a su nivel pero necesitamos u nicamente a Moss.

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

Programa que resuelve el Problema


1 2 3 4 5 6 7 8 9 10 11 #include <i o s t r e a m > #include < u t i l i t y > #include < c s t d i o > #include <v e c t o r > #include <cmath> #include <queue > u s i n g namespace s t d ; int s o l v e ( s t r i n g s ) { v e c t o r <int > v ( 1 5 0 ) , pos ( 1 5 0 ) ; f or ( int i =0; i <s . s i z e ( ) ; i ++){

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

Problema - La nueva pieza de ajedrez


El ajedrez se juega en un tablero de 8x8 con diferentes tipos de chas, que se mueven de diferente forma. Se est a evaluando adicionar un nuevo tipo de cha al tablero y uno de los aspectos que queremos analizar, es su alcance en el tablero. El movimiento de una cha, se puede determinar por movimientos horizontales y verticales. Por ejemplo, el caballo se puede mover una casilla horizontalmente y dos verticales o dos horizontales y una vertical. En el diagrama se puede observar como un caballo (la casilla C), en un movimiento, puede moverse a 8 posiciones (las marcadas con *). * * C * * * * * *

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

Partiendo de una esquina puede llegar a 8 lugares en m ultiples movimientos movimientos.

Programa que resuelve el Problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 / @author Gareve @problem La nueva f i c h a de a j e d r e z / #define DEBUG #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 >

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

Problema - Cuando Ver Pel culas


En la ciudad de La Paz existen diferentes lugares para ver pel culas pero ninguno como el Cine. El precio de las entradas en este cine var a dependiendo el d a, 10 Bolivianos los d as Mi ercoles 30 Bolivianos los S abados Domingos y los dem as d as 20 Bolivianos. Considerando que hoy es Lunes y solo podemos ver una pel cula al d a, ay udanos a elegir los d as en los que tenemos que ver N pel culas de tal forma que nos salga lo mas econ omico posible.

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

Programa que resuelve el Problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <i o s t r e a m > #include < u t i l i t y > #include < c s t d i o > #include <v e c t o r > #include <cmath> u s i n g namespace s t d ; int s o l v e ( int C, int N) { int days10 = C/7 + int ( (C %7)>=3) ; int days20 = (C/ 7 ) 4 ; i f (C %7 == 1 ) days20 += 1 ; i f (C %7 == 2 | | C %7 == 3 ) days20 += 2 ; i f (C %7 == 4 ) days20 += 3 ; i f (C %7 >= 5 ) days20 += 4 ; int r e s = 0 ;

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

Programa que resuelve el Problema


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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 / @author Gareve @problem S o l u c i o n e s / #define DEBUG #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 <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 0 0 0 9 ; int vc [MAX] , n ; int menor ( int a , int b ) { i f ( abs ( a ) == abs ( b ) ) return min ( a , b ) ; i f ( abs ( a ) < abs ( b ) ) return a ; else return b ; } int c e r c a n o a c e r o ( int pos ) { int v = vc [ pos ] ; // i d e a l m e n t e , v hace que s e a c e r o int a = 0 , b = n 1, mit ; o squeda b i n a r i a while ( a<b ) { // B A mit = ( a+b ) / 2 ; i f ( vc [ mit ] > v )

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

Problema - Cambio Hora


En el pa s de Code-livia despu es de mucho an alisis han decidido cambiar la hora para ahorrar electricidad Para convencer a todos de la necesidad de cambio de hora han construido unas tablas con la hora actual, y el tiempo que hay que agregar para obtener la hora nueva. Como todo se hizo de forma apresurada se ha registrado la hora actual en con el formato hora y minutos (HH : M M ). El incremento para obtener la hora nueva la registraron de dos formas, en algunos casos en minutos y en otros en el formato (HH:MM). Para calcular la hora nueva han decidido contratarlo, porque no saben como manejar dados de diferentes tipos.

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

Problema - Desbloqueando Bloqueos


Desbloqueando Bloqueos En el pa s de Code-livia existen muchos bloqueos tantos que a veces no hay camino a los diferentes destinos que este bello pa s ofrece. Existen N destinos en el pa s numerados de 1 al N , algunos est an desconectados ya que existen bloqueos en los caminos. Necesitamos que por lo menos haya una ruta entre un destino y otro pero desbloqueando la menor cantidad de rutas bloqueadas. Se garantiza que hay una forma de lograr esto.

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

Problema - Codigo de Vericaci on


DEBE LEER LOS DATOS DE codigoean.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-codigoean.out Todos los c odigos de barras que han visto en los productos que se venden en los supermercados, est an creados bajo la norma EAN, que homogeneiza la numeraci on y tiene m ultiples caracter sticas: Puede ser utilizado por fabricantes y distribuidores. Identica la unidad del producto de forma biun voca (un c odigo, un producto). No es explicativo o signicativo: toda la informaci on est a contenida en el registro de la base de datos al que se accede con el c odigo. Puede recogerse datos en el punto de venta. La representaci on del c odigo EAN se efect ua mediante la visualizaci on de 13 d gitos que identican el producto: Los dos primeros d gitos/caracteres corresponden al pa s. Los cinco caracteres siguientes identican la empresa fabricante del art culo. Los cinco siguientes caracteres es un n umero que identica cada uno de los productos que la empresa produce. La empresa podr a poner su propia numeraci on de productos. Por u ltimo, el d gito 13, es un d gito de control y se calcula mediante una sencillo algoritmo matem atico que elimina los errores en la lectura. El algoritmo para calcular este c odigo es como sigue: Se toman los d gitos del c odigo de izquierda a derecha Se multiplica los d gitos impares por 1 comenzando a contar de la izquierda Se multiplican los d gitos pares por 3 Se suman los valores Se halla la resta a la primera decena superior al numero, denominado c odigo de vericaci on Como ejemplo consideremos el c odigo 841234567890: Valores multiplicador resultado 8 1 8 4 3 12 1 1 1 2 3 6 3 4 1 3 3 12 5 1 5 6 3 18 7 1 7 8 3 24 9 1 9 0 3 0

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

Programa que resuelve el problema


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 #include < i o s t r e a m > #include < s t r i n g > #include < f s t r e a m > u s i n g namespace s t d ; int main ( void ) { o f s t r e a m f s ( s a l i d a c o d i g o e a n . out ) ; ifstream f e ( codigoean . in ) ; int c a s o s ; s t r i n g cad ; f e >> c a s o s ; int m u l t i p l i c a r = 1 , suma =0, r e s =0; f or ( int i =0; i < c a s o s ; i ++){ f e >> cad ; f or ( int j =0; j <cad . l e n g t h ( ) ; j ++){ suma+=(cad . a t ( j ) 0 ) m u l t i p l i c a r ; m u l t i p l i c a r = ( m u l t i p l i c a r +2) %4; } r e s=suma %10; i f ( r e s ==0) f s << 0 << e n d l ; else f s << (10 r e s ) << e n d l ; } return 0 ; }

www.icpc-bolivia.edu.bo

52

Problema - Trinomios Triangulares


DEBE LEER LOS DATOS DE trinomio.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-trinomio.out Consideremos la siguiente expresi on: (1 + x + x2 )n Dado un valor de n se quiere conocer cual es valor de los coecientes de la expresi on. Por ejemplo si n toma el valor de 1 los terminos de la expresi on son 1, 1, 1. Cuando n = 2 tenemos 1 + 2x + 3x2 + 2x3 + x4 por lo que la respuesta es 1, 2, 3, 2, 1

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 #include < i o s t r e a m > #include < s t r i n g > #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 t r i n o m i o . out ) ; ifstream fe ( trinomio . in ) ; int max=42; long long t [ max+ 3 ] [max 3 ] ; t [0][3+0]=1; t [0][3+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

Problema - Calculadora Inca


DEBE LEER LOS DATOS DE yupana.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-yupana.out La Calculadora de los Incas denominada Yupana consiste de una base parecida a la base binaria. Los n umeros se representan por varios unos y ceros que se dividen en 4 grupos como se muestra: 00000 000 00 0

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 entrada 5 00000000010 00000000110 00011000000 00000011000 00001000001

Ejemplos de salida 2 4 10 6 6

Programa que resuelve el problema


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 < a l g o r i t h m > #include < i o s t r e a m > #include < s t r i n g > #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 yupana . out ) ; i f s t r e a m f e ( yupana . i n ) ; int c a s o s ; s t r i n g cad ; f e >> c a s o s ; f or ( int i = 0 ; i < c a s o s ; i ++) { int uno=0, dos =0, t r e s =0, c i n c o =0; f e >> cad ; i f ( cad . a t ( 1 0 )== 1 ) uno++; i f ( cad . a t ( 9 )== 1 ) dos++; i f ( cad . a t ( 8 )== 1 ) dos++; i f ( cad . a t ( 7 )== 1 ) t r e s ++; i f ( cad . a t ( 6 )== 1 ) t r e s ++; i f ( cad . a t ( 5 )== 1 ) t r e s ++; i f ( cad . a t ( 4 )== 1 ) c i n c o ++; i f ( cad . a t ( 3 )== 1 ) c i n c o ++; i f ( cad . a t ( 2 )== 1 ) c i n c o ++; i f ( cad . a t ( 1 )== 1 ) c i n c o ++; i f ( cad . a t ( 0 ) ==1) c i n c o ++; f s << ( c i n c o 5+ t r e s 3+dos 2+uno ) << e n d l ; } return 0 ; }

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

Programa que resuelve el problema


1 2 3 4 5 6 7 #include < a l g o r i t h m > #include < i o s t r e a m > #include < s t r i n g > #include < v e c t o r > #include < f s t r e a m > u s i n g namespace s t d ;

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

Problema - Juego de Canguros


DEBE LEER LOS DATOS DE canguros.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-canguros.out Tres canguros estan jugando en un desierto, Ellos estan jugando sobre una linea de numeros, cada uno ocupando un diferente numero entero, En un movimiento, uno de los canguros que estan fuera, salta dentro del espacio entre los otros dos. En ningun instante debe haber dos canguros en la misma posicion. Ayudalos a jugar lo mas largo posible.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include < i o s t r e a m > #include < s t r i n g > #include < f s t r e a m > 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 n g u r o s . out ) ; i f s t r e a m f e ( canguros . in ) ; int main ( void ) { int a , b , c ; f e >> a , b , c ; i f ( ba > cb ) f s << ( ba 1 ) << e n d l ; else

www.icpc-bolivia.edu.bo

59

16 17 18 19 }

f s << ( cb 1) << e n d l ; return 0 ;

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

Programa que resuelve el problema


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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 / @author Gareve / #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 r d i l l e r a . out ) ; ifstream fe ( c o r d i l l e r a . in ) ; void r e s u e l v a ( ) {

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

En el tercer ejemplo, tachamos en el siguiente orden: 2, 4, 6, 8, 10, 3, 9, 5 y 7 el s eptimo numero es 9.

Programa que resuelve el problema


1 2 3 4 5 6 #include < i o s t r e a m > #include < s t d i o . h> #include < s t r i n g . h> #include < f s t r e a m > u s i n g namespace s t d ;

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

Programa que resuelve el problema


1 #include < a l g o r i t h m > 2 #include < i o s t r e a m > 3 #include < s t r i n g >

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 ; }

++i ) { ABC [ i %3]; BABC [ i %4]; CCAABB [ i %6];

max( s k o r [ 1 ] , s k o r [ 2 ] ) ) ; f s << Alvaro << e n d l ; f s << Edwin << e n d l ; f s << G a b r i e l << e n d l ;

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

Programa que resuelve el problema


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 < c s t r i n g > #include < i o s t r e a m > #include < s t r i n g > #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 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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 / @author G a b r i e l Rea / #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 >

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

Problema - Codigo USSD


DEBE LEER LOS DATOS DE codeigoussd.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-codigoussd.out La empresa telefonica esta implementando los codigos USSD para comunicarse con los telefonos celulares de sus clientes para los cual te ha contratado con la nalidad de que elabores un programa que determine si un codigo USSD es valido. Los codigos USSD consiten de un texto que contiene un caracter asterisco seguido de un n umero de tres caracteres numericos, continua un segundo asteriesco, sigue una cantidad variable de caracteres numericos y termina con un caracter numeral. Por Ejemplo *109*123456# . Se consideran codigos validos los que cumplen esta especicaci on.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 / @author J o r g e Teran / #include < a l g o r i t h m > #include < i o s t r e a m > #include < s t r i n g > #include < f s t r e a m > u s i n g namespace s t d ;

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

Problema - Collar Palindrome


DEBE LEER LOS DATOS DE collar.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-collar.out Se dice que una cadena es palindrome si cuando se lee de ambos lados es exactamente igual, por ejemplo: abcba es un palindrome, se lee igual de ambos lados. Sin embargo abcd no es un palindrome porque de izquierda a derecha no es igual que de derecha a izquierda. Dado un collar con una n umero en cada cuenta del collar, encontrar si existe o no un palindrome de tama no K. Explicaci on del caso de prueba 1: Si bien el string no tiene un palindrome de tama no 3, se debe hacer notar que el collar es circular esto signica que si unimos los extremos del collar, tenemos el palindrome 2 1 2

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

Programa que resuelve el problema


1 / 2 @author G a b r i e l Rea 3 /

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

Programa que resuelve el problema


1 / 2 @author J o r g e Teran 3 / #i n c l u d e < i o s t r e a m > 4 #i n c l u d e < s t r i n g > 5 #i n c l u d e < f s t r e a m > 6 7 u s i n g namespace s t d ; 8 9 10 / 11 Letra para e s t a b l e c e r e l c o l o r de l o a h a b i t a n t e s d e l n i s o 12 para i d e n t i f i c a r n i do v a c i o 13 / 14 o f s t r e a m f s ( s a l i d a n i d i t o . out ) ; 15 ifstream fe ( nidito . in ) ; 16 17 int main ( ) 18 { 19 int m, n ; 20 int c ; 21 22 f e >>c ; 23 24 f or ( int l = 1 ; l <= c ; l ++){

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

Programa que resuelve el problema


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 31 32 33 34 / @author Alvaro Rojas / #include < i o s t r e a m > #include < v e c t o r > #include < c s t d i o > #include <cmath> #include < f s t r e a m > #define MINIMO 10000 u s i n g namespace s t d ; int n ; o f s t r e a m f s ( s a l i d a t e t r i s . out ) ; ifstream fe ( t e t r i s . in ) ; void r e s o l v e ( ) { int m i n h e i g t h = MINIMO; v e c t o r <int > h e i g h t ; int s u m a s u r f a c e = 0 ; bool f l a g = true ; h e i g h t . push back ( 0 ) ; f or ( int i =0; i <n ; i ++){ int data ; f e >>data ; h e i g h t . push back ( data ) ; m i n h e i g t h = min ( m i n h e i g t h , data ) ; } h e i g h t . push back ( 0 ) ; int a d i t i o n a l = 0 ; f or ( int i =0; i < h e i g h t . s i z e ( ) 1; i ++){ h e i g h t [ i ] = m i n h e i g t h ; i f ( height [ i ] > 0 ){ a d i t i o n a l ++; } s u m a s u r f a c e += ( h e i g h t [ i ] 2 ) ; s u m a s u r f a c e += abs ( ( double ) h e i g h t [ i ] ( ( double ) h e i g h t [ i +1]

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

Problema - Aritm etica Maya


DEBE LEER LOS DATOS DE mayas.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-mayas.out Los Mayas ten an una forma de de escribir n umeros que les permit a hacer los c alculos. La notaci on de sus n umeros era con puntos y rayas que las representaremos por guiones. Cada punto representa la unidad y una raya representa 5 unidades. Veamos: .. representar a el numero 7, esto es una raya cinco mas dos puntos da siete. Cada vez que tenemos 5 unidades, osea 5 puntos se cambia por una raya. El n umero mas grande que se puede representar es el 20 que son cuatro rayas. Como ejemplo veamos el siguiente n umero Maya --. .. -... --Cada una de las lineas representa un d gito Maya, por lo que las 4 lineas representan los digitos 11, 2, 8, 15 que en notaci on decimal es 88975. El d gito 0 se representa con un cero en una sola l nea. El digito menos signicativo el es 15.

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

Ejemplos de entrada 4 --. .. -... --. 0 0 0 --. . 0 0 0 0 0 -

Ejemplos de salida 88975 8000 88400 5

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 / @author J o r g e Teran / #include < i o s t r e a m > #include < s t r i n g > #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 mayas . out ) ; i f s t r e a m f e ( mayas . i n ) ; int c a s o s ; f e >> c a s o s ; char s a l t a [ 1 0 ] ; f e . g e t l i n e ( sal t a , 10) ; f or ( int c1 = 0 ; c1 < c a s o s ; c1++) { int d e c i m a l =0; int d [ 4 ] ; f or ( int i = 0 ; i < 4 ; i ++) { char maya [ 1 0 ] ; // f e . g e t l i n e >> maya ; f e . g e t l i n e ( maya , 1 0 ) ; int unos =0, c i n c o s =0; f or ( int j = 0 ; maya [ j ] > 1 ; j ++) {

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

Problema - N umero de la suerte


DEBE LEER LOS DATOS DE lucky.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-lucky.out En la teor a de n umeros, un n umero de la suerte es un n umero natural en un conjunto que se genera por una criba similar a la Criba de Erat ostenes que genera los n umeros primos. Comenzando con una lista de n umeros enteros a partir de 1: 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... Se eliminan los n umeros de dos en dos, todos los n umeros pares; en esta primera iteraci on s olo quedan los n umeros impares: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25... El segundo t ermino de esta secuencia es de 3. Entonces se eliminan todos los n umeros de tres en tres: 1, 3, 7, 9, 13, 15, 19, 21, 25... El tercer n umero que ha quedado es 7, as que cada s eptimo n umero que queda se elimina: 1, 3, 7, 9, 13, 15, 21, 25... Dado que este procedimiento se repite indenidamente, los sobrevivientes son los n umeros de la suerte: 1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, 87, 93, 99...

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

Programa que resuelve el problema


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 / @author J o r g e Teran / #include < i o s t r e a m > #include < v e c t o r > #include < f s t r e a m > 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 l u c k y . out ) ; main ( ) { v e c t o r <int > numbers ; int max = 1 0 0 0 ; f or ( int i = 1 ; i <= max ; i += 2 ) numbers . push back ( i ) ; int v i l = 3 ; int i t = 1 ; while ( t r u e ) { v i l=numbers [ i t ] ; i t ++; int c = numbers . s i z e ( ) % vil ; int a = numbers . s i z e ( )c 1; i f ( v i l >=numbers . s i z e ( ) ) break ; f or ( int i=a ; i > 1; i=i v i l ) numbers . e r a s e ( numbers . b e g i n ( )+i ) ; } f s << numbers . s i z e ( ) ; } // 1 , 3 , 7 , 9 , 13 , 15 , 21 , 25 , 31 , 33 , 37 , 43 , 49 , 51 , 63 , 67 , 69 , 73 , 75 , 79 , 87 , 93 , 9 9 . . .

www.icpc-bolivia.edu.bo

87

Problema - El dulce M agico


DEBE LEER LOS DATOS DE dulce.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-dulce.out A Jos e le han asignado la tarea de encontrar el dulce m agico, en una bolsa de dulces. Todos los dulces estan numerados de 1 a n, y el dulce m agico se halla con el siguiente procedimiento: Mientras exista un dulce Descarta todos los dulces que est an en posiciones que corresponden a un cuadrado perfecto, por ejemplo los dulces que est an en las posiciones 1, 4, 9, 16, 25, etc. Enumerar todos los dulces manteniendo el orden original Repetir el proceso, cuando quede un solo dulce, encontraste el dulce m agico. Veamos un ejemplo, supongamos que tenemos 9 dulces y cada uno tiene una etiqueta: ABCDEF GHI Paso 1: descartar los dulces de las posiciones que corresponden a un cuadrado perfecto, 1, 4, 9(A, D, I ) Paso 2: repetimos el proceso con los dulces restantes BCEF GH Paso 3: descartar los dulces de las posiciones 1, 4(B, F ) Paso 4: quedan CEGH por lo que hay que descartar 1, 4(C, H ) Paso 5: quedan EG por lo que descartamos el dulce 1 que es E El dulce m agico es G Dato que el dulce m agico estaba en la s eptima posici on debe dar como respuesta 7.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 / @author J o r g e Teran / #include < i o s t r e a m > #include < v e c t o r > #include <math . h> #include < f s t r e a m > 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 d u l c e . out ) ; ifstream fe ( dulce . in ) ; main ( ) { int c a s o s ; f e >> c a s o s ; f or ( int i =0; i < c a s o s ; i ++){ int d u l c e s ; f e >> d u l c e s ; int n=d u l c e s ; int u l t i m o D u l c e=n ; while ( n > 1 ) { int d e s c a r t a r = s q r t ( n ) ; i f ( d e s c a r t a r d e s c a r t a r == n ) // v e r i f i c a r s i e s un cuadrado p e r f e c t o u l t i m o D u l c e ; n = d e s c a r t a r ; } f s << u l t i m o D u l c e << e n d l ; }

23 24 25 26 27 28 }

www.icpc-bolivia.edu.bo

89

Problema - Suma de Primos


DEBE LEER LOS DATOS DE sumprimos.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-sumprimos.out Una antigua conjetura indica que todo numero primo mayor a 5 puede ser hallar como la suma de tres n umeros primos. Por ejemplo el numero primo 31 puede hallarse como la suma de los primos 3, 5, 23. Tambi en podr a expresarse como la suma de 5, 3, 23 lo que se busca son los n umeros m as peque nos, escritos en orden ascendente. Recordemos que los n umeros primos son aquellos que solo son divisibles por si mismos y por uno. El numero uno no se considera como un numero primo.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 / @author J o r g e Teran / #include < i o s t r e a m > #include < v e c t o r > #include < f s t r e a m > 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 sumprimos . out ) ; i f s t r e a m f e ( sumprimos . i n ) ; int tmax = 1 0 0 0 0 0 0 ;

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

Problema - Edad de los Hijos


DEBE LEER LOS DATOS DE edades.in LA SALIDA DEL PROGRAMA SE DEBE GRABAR EN salida-edades.out Dos amigas Mar a y Ana se encuentran y se ponen a conversar muy amenamente, Ana dice a Mari a como has estados, le contesta muy bien tengo tres hijos. Ana pregunta pregunta Que edades tienen?. Como Mar a sabe que Ana es especialista en resolver problemas, le dice la multiplicaci on de sus edades es 72. Ana contesta con esta informaci on no me es posible conocer las edades de tus hijos. Maria le dice la suma de sus edades es el mismo n umero de la casa de enfrente. Ana dice a un no puedo saber, bueno le dice, mi hija mayor toca el piano. Oh dice Ana, lindas edades mi hija mayor tiene la misma edad. Como hizo Ana para conocer las edades de los hijos de Mar a? El an alisis que realizo es el siguiente: Todas las posibles edades cuya multiplicaci on da 72 es: Edades Suma de edades 1 1 72 74 1 2 36 39 1 3 24 28 1 4 18 23 1 6 12 19 189 18 2 2 18 22 2 3 12 17 249 15 266 14 338 14 346 13 De este an alisis cuando le indica que las edades suman el numero de la puerta, se da cuenta que solo hay un caso posible, que es cuando las posibles edades suman 14. Estos son los casos 2, 6, 6 y 3, 3, 8. Cuando recibe la respuesta hay una mayor ya sabe que el resultado es 3, 3, 8. En los casos que no suma 14, con los datos dados no es posible hallar una soluci on u nica. No signica que el numero de la casa es siempre 14. Este procedimiento debe utilizarse para resolver el problema planteado.

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 * + *

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 // @author G a b r i e l Rea #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> #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++)

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

Problema - Distancia de Hamming


La distancia de Hamming entre dos n umeros esta denida como el n umero de posiciones en sus representaciones binarias en las que dieren. Los ceros a la izquierda son usados si son necesarios para que a las representaciones binarias tengan misma longitud. o meros 11010 y 01100 dieren en la primera, tercera y cuarta posici Por ejemplo, los nA on, as que dan una distancia de Hamming de 3. La entrada son cadenas que contienen las representaciones binarias de ciertos n umeros (cada par de n umeros tiene la misma longitud). Debe devolver las distancias de Hamming de todos los pares de n umeros dados.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 / Problema : D i s t a n c i a de Hamming Autor : A l b e r t o Suxo C o p y r i g h t : Team SIM Lenguaje : C++, Ansi s t y l e / #include < i o s t r e a m > #include < s t r i n g > u s i n g namespace s t d ;

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

Problema - Hallando n umeros capic uas


Tome un n umero, lo invierte, luego lo suma al n umero original, luego otra vez lo invierte y lo suma. Este proceso se repite hasta que la suma sea capic ua o se haya hecho 100 sumas. Por ejemplo el 14 lo invertimos y obtenemos 41 sumamos al n umero original obteniendo 55 es capic ua. Imprimimos 55. Otro ejemplo 95 + 59 = 154. Invertimos y sumamos 154 + 451 = 605. Repetimos el proceso 605 + 506 = 1111 que es capic ua.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 o as / Problema : H a l l a n d o numeros c a p i c A Autor : A l b e r t o Suxo C o p y r i g h t : Team SIM Lenguaje : C++, Ansi s t y l e / #include < i o s t r e a m > u s i n g namespace s t d ; long i n v e r t i r ( long a ) { long aux = 0 ;

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

while ( { aux a = } return }

a > 0 ) = aux 10 + a %10; a / 10; aux ;

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

Programa que resuelve el problema


1 / Problema : Poema 2 Autor : A l b e r t o Suxo 3 C o p y r i g h t : Team SIM 4 Lenguaje : C, Ansi s t y l e 5 / 6

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

Problema - La u ltima esperanza


Los Terrans est an siendo atacados por los Protoss una raza de Humanoides que aparecen en la serie Star Craft. Los Terrans ya casi sin tropas y con poca estructuras solo tienen una esperanza para vencer en esta guerra contra los Protoss. Y esa esperanza es poder usar el arma m as poderosa que tienen, ?la Bomba Nuclear?. Entonces necesitan un soldado para poder marcar el blanco para el ataque nuclear a los Protoss, el cual es Ghost, un soldado capaz de volverse invisible y poder inltrarse en la base de los Protoss. Ghost se dirige hacia la Base de los Protoss y logra inltrarse en ella para poder marcar el blanco del ataque Nuclear. Ghost est a indeciso para marcar el blanco para el ataque Nuclear as que los Terrans piden tu ayuda. Ghost te enviara coordenadas de cada estructura de la base Protoss. As que el quiere saber el n umero de estructuras que ser an destruidas dadas las coordenadas del blanco de la bomba nuclear y el radio de alcance de esta. El gr aco siguiente corresponde al primer caso de prueba, donde claramente podemos notar que el alcance del radio de la bomba nuclear llega a tocar el punto (1, 0) (Pues la distancia del punto de la estructura Protoss a la bomba es menor o igual al radio de alcance de la bomba), por lo tanto la Bomba destruye una estructura, en cambio la estructura que se encuentra en el punto (1, 1) no es alcanzada por la bomba Nuclear.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 o ltima esperanza / Problema : La A Autor : Alvaro Rojas Lenguaje : C++, Ansi s t y l e / #include < c s t d i o > #include < i o s t r e a m > #include < v e c t o r > #include <cmath> u s i n g namespace s t d ; int t ; double d i s t a n c i a ( p a i r <double , double> a , p a i r <double , double> b ) {

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

Problema - Bolivia Word


La organizaci on de la IOI BOLIVIA hizo hacer letras de tama no grande, para poder ponerlas en varios lugares del evento. Mientras transportaban el paquete que almacenaba las letras este se rompi o y dejo caer las letras, al caer las letras varias de estas se perdieron. As que ellos no est an seguros si con las letras restantes podr an armar las palabras que ellos quer an. Por ejemplo si tenemos las letras O, I, L, I, B, V, A, Z, T y queremos armar la palabra BOLIVIA, notaremos claramente que es posible armarla. En cambio si tuvi eramos las letras O, L, I, B, V, A, Z, T no ser a posible armar la palabra BOLIVIA pues no faltar a una letra (la letra I). Los organizadores piden tu ayuda. Ellos te dar an las letras disponibles y quieren saber si es posible armar la palabra BOLIVIA.

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

Programa que resuelve el problema


1 / Problema : B o l i v i a Word 2 Autor : A l b e r t o Suxo 3 C o p y r i g h t : Team SIM 4 Lenguaje : C++, Ansi s t y l e 5 / 6 7 #include < i o s t r e a m >

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

Problema - La gran bomba de explosi on extra na de destrucci on masiva Z


La plaga zombie ha ido ganando a la humanidad en la gran guerra Z. Ahora que la humanidad ha despertado de su estupor inicial frente al inicio del apocalipsis Zombie, lleg o la hora del contraataque! Tu equipo est a evaluando diferentes armas de destrucci on masiva, en este caso, bombas creadas por cient cos de poca cordura. Estas bombas crean explosiones rectangulares!, muy efectivas en entornos urbanos. Los cient cos han ofrecido a tu equipo una cantidad N de bombas rectangulares anti - zombie de diferentes tipos. En este momento se encuentran en la etapa de preparaci on de los lugares en los que las bombas llegar an a formar una explosi on m as efectiva que nos libre de la infestaci on zombie.

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 entrada 4 1 1 1 2 2 2 1 1 3 3 1 1 2 2 2 1 1 3 3 2 2 4 4 2 1 1 10000000 3 5000000 2 10000000 4

Ejemplos de salida Caso Caso Caso Caso #1: #2: #3: #4: 1 4 7 2499998

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 / Problema : La gran bomba . . . Autor : G a b r i e l Rea Lenguaje : C++, Ansi s t y l e / #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> #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++) 21 #define P p a i r <int , int > 22 u s i n g namespace s t d ; 23 24 c l a s s R e c t a n g l e { p u b l i c : 25 int ax , ay , bx , by ; 26 R e c t a n g l e ( ) {} 27 } ; 28 int n ;

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

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 11 12 / Problema : Angulos Autor : A l b e r t o Suxo C o p y r i g h t : Team SIM Lenguaje : C++, Ansi s t y l e / #include < i o s t r e a m > #define x 0 #define y 1 #define DIM 2

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++ ) >> A[ y ] ; >> B [ y ] ; >> C[ y ] ;

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

Problema - Flecha m as Larga


En este problema una echa a la izquierda se dene como el car acter < seguido inmediatamente de cero o m as caracteres . Un echa doble a la izquierda se dene como un car acter < seguido de cero o m as caracteres consecutivos = . Una echa a la derecha se dene como cero o m as caracteres seguidos del car acter >. Un echa doble a la derecha se dene como cero o m as caracteres = seguidos del car acter >. Dada una cadena se quiere hallar la longitud de la echa m as larga.

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

Programa que resuelve el problema


1 2 3 4 5 6 7 8 9 10 / Problema : F l e c h a mAs larga Autor : A l b e r t o Suxo C o p y r i g h t : Team SIM Lenguaje : C++, Ansi s t y l e / #include < i o s t r e a m > #include < s t r i n g > #define MAX(A, B) (A) >(B) ? (A) : ( B)

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

Proponentes de los Problemas


Trinomios Triangulares - Jorge Teran Calculadora Inca - Jorge Teran Palindromes - Jorge Teran Juego de Canguros - Gabriel Rea Cordillera - Gabriel Rea Eratostenes - Hernan Payrumani Examen - Hernan Payrumani Quimica - Hernan Payrumani Cajas - Gabriel Rea Codigo USSD - Jorge Teran Collar - Gabriel Rea Nidito - Leticia Blanco Tetris - Alvaro Rojas Mayas - Jorge Teran Numeros de la Suerte - Jorge Teran Dulce Magico - Jorge Teran Suma Primos - Jorge Teran Edades - Jorge Teran Sumando Digitos - Jorge Teran Buscando el Diez - Jorge Teran M ultiplos - Jorge Teran Rect angulo mas grande - Jorge Teran? Carga Cajas - Jorge Teran? Sumando Digitos - Jorge Teran Acuario - Jorge Teran Gusanillo - Jorge Teran Apariencia triangular - Leticia Blanco

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

Potrebbero piacerti anche