You are on page 1of 55

ACM ICPC Bolivia

Solucionario Consolidado
Utilizando PSeInt
2da Olimpiada Boliviana de Informtica
Estado Plurinacional de Bolivia, febrero de 2013

Alberto J. Suxo Riveros


<albertosuxo@gmail.com>

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Contenidos
Fase 4 Final Nacional....................................................................................................... 1
Problema A: Distancia de Hamming .............................................................................. 1
Problema B: Hallando nmeros capicas ....................................................................... 3
Problema C: Poema......................................................................................................... 5
Problema D: La ltima Esperanza ................................................................................. 7
Problema E: Bolivia Word ............................................................................................ 10
Fase 3 - Departamental ..................................................................................................... 12
Problema A: Cena para Cinco....................................................................................... 12
Problema B: Cdigo USSD .......................................................................................... 14
Problema C: Sumando Fibonacci.................................................................................. 17
Problema D: Leones ...................................................................................................... 19
Problema E: Nmero de la suerte ................................................................................. 21
Problema F: Aritmtica Maya ....................................................................................... 24
Problema G: Narcisos ................................................................................................... 26
Fase 2 - Regional .............................................................................................................. 28
Problema A: Trinomios Triangulares ........................................................................... 28
Problema B: Calculadora Inca ...................................................................................... 30
Problema C: Aritmtica ................................................................................................ 32
Problema D: Bender ...................................................................................................... 35
Problema E: Eratstenes ............................................................................................... 37
Problema F: Examen ..................................................................................................... 39
Problema G: Lago ......................................................................................................... 42
Problema H: Qumica ................................................................................................... 44
Anexo ................................................................................................................................ 46
Opciones del Lenguaje .................................................................................................. 46
PSeInt ............................................................................................................................ 47

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Fase 4 Final Nacional


Problema A: Distancia de Hamming
Autor: Jorge Tern
La distancia de Hamming entre dos nmeros est definida como el nmero de
posiciones en sus representaciones binarias en las que difieren. Los ceros a la izquierda
son usados si son necesarios para que a las representaciones binarias tengan misma
longitud.
Por ejemplo, los nmeros 11010 y 01100 difieren en la primera, tercera y cuarta
posicin, as que dan una distancia de Hamming de 3.
La entrada son cadenas que contienen las representaciones binarias de ciertos
nmeros (cada par de nmeros tiene la misma longitud). Debe devolver las distancias
de Hamming de todos los pares de nmeros dados.

Entrada
La primera lnea tendr un nmero N, que es la cantidad de casos de prueba. Seguido
de N lneas, En cada lnea se vienen dos cadenas con las representaciones binarias
separadas por un espacio. Cada cadena tendr entre 1 y 50 caracteres, inclusive.
Todos los elementos de nmeros contendrn slo los caracteres 1 y 0.

Salida
La salida consiste en una lnea para cada caso de prueba que contiene la distancia
Hamming.

Ejemplo de entrada
3
11010 01100
10000001 10000001
11111111 00000000
Ejemplo de salida
3
0
8

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Distancia de Hamming
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Hamming
Definir N, i, j, cnt Como Entero;
Definir a, b Como Caracter;
Leer N;
Para i<-1 Hasta N Con Paso 1 Hacer
Leer a, b;
cnt <- 0;
Para j<-0 Hasta Longitud(a)-1 Con Paso 1 Hacer
Si Subcadena(a,j,j) <> Subcadena(b,j,j) Entonces
cnt <- cnt + 1;
FinSi
FinPara
Escribir cnt;
FinPara
FinProceso

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Problema B: Hallando nmeros capicas


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

Entrada
La primera fila tendr un nmero N que es el nmero de datos de entrada, seguido de N
lneas, cada lnea consiste de un numero entero n 500 un una lnea.

Salida
Por cada nmeros de entrada el numero capica hallado. Si no existe un imprima la
palabra imposible.

Ejemplo de entrada
2
14
95
Ejemplo de salida
55
1111

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Hallando nmeros capicas
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

SubProceso resultado <- invertir ( a )


Definir resultado Como Entero;
Definir aux como Entero;
aux <- 0;
Mientras a > 0 Hacer
aux <- (aux * 10) + (a % 10);
a <- trunc(a / 10);
FinMientras
resultado <- aux;
FinSubProceso
Proceso Capicuas
Definir N, i, cnt, A, B Como Entero;
Definir seguir Como Logico;
Leer N;
Para i<-1 Hasta N Con paso 1 Hacer
Leer A;
cnt <- 0;
seguir <- verdadero;
Mientras seguir Hacer
B <- invertir( A );
Si A = B Entonces
seguir <- falso;
Sino
A <- A + B;
FinSi
cnt <- cnt + 1;
Si cnt=100 Entonces
seguir <- falso;
FinSi
FinMientras
Si cnt = 100 Entonces
Escribir "Imposible";
Sino
Escribir A;
FinSi
FinPara
FinProceso

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Problema C: Poema
Autor: Alberto Suxo
Como cada ao, en el colegio de Jos se organiza todo un evento por el da de la
madre.
Comenzar con un himno, coreografas de bailes, una pequea obra de teatro, una
banda de estudiantes tocar un tema especialmente dedicado y, por ltimo, un poema,
(a cargo de Jos).
Pero, Jos est muy nervioso, ha hecho todo lo posible para memorizar el poema. Sus
amigos decidieron ayudar a Jos quitando todas las vocales del poema y remplazarlos
por guiones, luego dejaron que Jos lo lea para ver si realmente lo ha memorizado todo.
El problema es que los amigos de Jos quieren estar seguros de remplazarlos bien sin
arruinar el poema, para lo cual decidieron hacerlo mediante un programa.
Tu trabajo es ayudar a estos nios.

Entrada
La primera lnea tendr un nmero entero N (0 < N < 1000) que representa el nmero
de lneas que tendr el poema.
Cada lnea del poema tendr un mximo de 100 caracteres que contendr: mayscula
(A-Z), minscula (a-z), espacios ( ), puntos (.) y comas (,).

Salida
En la salida se mostrar el poema sin vocales como se muestra en el ejemplo de salida.

Ejemplo 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
Ejemplo 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

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Poema
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

SubProceso resultado <- esVocal( ch )


Definir resultado Como Logico;
Definir c Como Caracter;
c <- Minusculas( ch );
Si c="a" | c="e" | c="i" | c="o" | c="u" Entonces
resultado <- verdadero;
Sino
resultado <- falso;
FinSi
FinSubProceso
Proceso Poema
Definir n, i, j Como Entero;
Definir linea Como Caracter;
Definir car, temporal Como Caracter;
Leer n;
Para j<-1 Hasta n Hacer
Leer linea;
Para i<-0 Hasta Longitud(linea)-1 Con paso 1 Hacer
car <- Subcadena(linea,i,i);
Si esVocal( car ) Entonces
// Reemplazar un caracter :'(
Si i > 0 Entonces
temporal <- concatenar(Subcadena(linea,0,i-1),"-");
Sino
temporal <- "-";
FinSi
Si i<Longitud(linea)-1 Entonces
temporal <Concatenar(temporal,Subcadena(linea,i+1,Longitud(linea)-1));
FinSi
linea <- temporal;
// Fin de Reemplazar un caracter :-P
FinSi
FinPara
Escribir linea;
FinPara
FinProceso

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Problema D: La ltima Esperanza


Autor: Alvaro Rojas
Los Terrans estn 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 ms
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 infiltrarse
en la base de los Protoss.
Ghost se dirige hacia la Base de los Protoss y logra infiltrarse en ella para poder marcar
el blanco del ataque Nuclear.
Ghost est 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 l quiere
saber el nmero de estructuras que sern destruidas dadas las coordenadas del blanco
de la bomba nuclear y el radio de alcance de esta.

Entrada

La primera lnea es un entero T (1 T 100) el nmero de casos de prueba.


Seguidamente se te dar un entero N (1 N 100) el nmero de coordenadas x, y que
te enviar Ghost.
A continuacin vendrn N lneas, cada una de 2 valores x, y (0 x, y 1000) donde
cada una representa la coordenada de una estructura Protoss.
La ltima lnea tendr 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 nmero de estructuras Potross destruidas por la
bomba Nuclear (Una estructura ser destruida si la coordenada de la estructura Protoss
est en el radio de alcance de la Bomba Nuclear)

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Ejemplo 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
Ejemplo de salida
1
2
1

El grfico 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.

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Ultima Esperanza
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

SubProceso resultado <- distancia( P1x, P1y, P2x, P2y)


Definir resultado Como Real;
resultado <- RC( (P1x-P2x)^2 + (P1y-P2y)^2 );
FinSubProceso
Proceso UltimaEsperanza
Definir t, n, coords, X, Y Como Entero;
Definir bombX, bombY, radio Como Entero;
Definir i, total Como Entero;
Dimension coords[1001,2];
// alamacenaremos todas las coordenadas en las columnas
// correspondientes, X en la primera columna y Y en la segunda.
X <- 0;
Y <- 1;
Leer t;
Mientras t > 0 Hacer
t <- t - 1;
Leer n;
Para i <- 0 Hasta n-1 Hacer
Leer coords[i,X];
Leer coords[i,Y];
FinPara
// leer datos de la bomba
Leer bombX, bombY, radio;
total <- 0;
Para i <- 0 Hasta n-1 Hacer
Si distancia( coords[i,X], coords[i,Y], bombX, bombY)<=
radio Entonces
total <- total + 1;
FinSi
FinPara
Escribir total;
FinMientras
FinProceso

Alberto J. Suxo Riveros

ACM ICPC Bolivia

Problema E: Bolivia Word


Autor: Alvaro Rojas
La organizacin de la IOI BOLIVIA hizo hacer letras de tamao grande, para poder
ponerlas en varios lugares del evento.
Mientras transportaban el paquete que almacenaba las letras este se rompi y dejo caer
las letras, al caer las letras varias de estas se perdieron. As que ellos no estn seguros
si con las letras restantes podrn armar las palabras que ellos queran.
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 tuviramos las
letras O, L, I, B, V, A, Z, T no ser posible armar la palabra BOLIVIA pues no faltara
una letra (la letra I).
Los organizadores piden tu ayuda. Ellos te darn las letras disponibles y quieren saber
si es posible armar la palabra BOLIVIA.

Entrada

La primera lnea contendr un entero N (1 N 10) el nmero de casos de prueba.


A continuacin se te dar N lneas, cada una con una cadena (solo maysculas), donde
cada carcter 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'.

Ejemplo de entrada
3
BOLIVIA
BOOIILVA
BOLVZATY
Ejemplo de salida
ES POSIBLE
ES POSIBLE
NO ES POSIBLE

Alberto J. Suxo Riveros

10

ACM ICPC Bolivia

Solucin
// Olimpiada Boliviana De Informatica
// Problema : Bolivia Word
// Autor
: Alberto Suxo
// Copyright: Team SIM
// Lenguaje : Pseudocodigo PSeInt
// *******************************
Proceso BoliviaWord
Definir N, j, k Como entero;
Definir linea Como caracter;
Definir car Como caracter;
Definir B, O, L, I, V, A como Entero;
Leer N;
Para k <- 1 Hasta N Con Paso 1 Hacer
Leer linea;
B <- 0;
O <- 0;
L <- 0;
I <- 0;
V <- 0;
A <- 0;
Para j <- 0 Hasta Longitud(linea)-1 Con paso 1 Hacer
car <- Subcadena(linea,j,j);
Si car="B" Entonces
B <- B + 1;
Sino
Si car="O" Entonces
O <- O + 1;
sino
Si car="L" Entonces
L <- L + 1;
Sino
Si car="I" Entonces
I <- I + 1;
Sino
Si car="V" Entonces
V <- V + 1;
Sino
Si car="A" Entonces
A <- A + 1;
FinSi
FinSi
FinSi
FinSi
FinSi
FinSi
FinPara
Si B<1 | O<1 | L<1 | I<2 | V<1 | A<1 Entonces
Escribir "NO ES POSIBLE";
Sino
Escribir "ES POSIBLE";
FinSi
FinPara
FinProceso
Alberto J. Suxo Riveros

11

ACM ICPC Bolivia

Fase 3 - Departamental
Problema A: Cena para Cinco
Autor: Gabriel Rea
En un popular show llamado Cena para cinco, cinco concursantes compiten preparando
delicias culinarias. Todas las noches uno de ellos hace la cena los otros cuatro lo
califican entre 1 y 5.
La cantidad de puntos que un concursante obtiene es igual a la suma de puntos que
obtuvo. El ganador del programa de televisin es por supuesto el que obtiene ms
puntos.
Escribe un programa que determine al ganador y cuantos puntos obtuvo.

Entrada

La primera lnea contendr un entero N (1 N 10) el nmero de casos de prueba.


Cada caso de prueba est dado en cinco lneas, cada una contiene 4 enteros, los
puntos que cada concursante obtuvo.
Los concursantes estn numerados del 1 al 5 en el orden en que sus puntajes son
dados.
Se garantiza que la entrada genera una solucin nica.

Salida
La salida es una lnea con el nmero del ganador y sus puntos separados por un
espacio.

Ejemplos de entrada
5 4 4 5
5 4 4 4
5 5 4 4
5 5 5 4
4 4 4 5
4 4 3 3
5 4 3 5
5 5 2 4
5 5 5 1
4 4 4 4
Ejemplos de salida
4 19
2 17

Alberto J. Suxo Riveros

12

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Cena para Cinco
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Cena
Definir N, i, j, k, sum, puntos, ganador, x Como Entero;
Leer N;
Para k<-1 Hasta N Hacer
puntos <- 0;
ganador <- 0;
Para i<-1 Hasta 5 Hacer
sum <- 0;
Para j<-1 Hasta 4 Hacer
Leer x;
sum <- sum + x;
FinPara
Si sum > puntos Entonces
puntos <- sum;
ganador <- i;
FinSi
FinPara
Escribir ganador , " " , puntos;
FinPara
FinProceso

Alberto J. Suxo Riveros

13

ACM ICPC Bolivia

Problema B: Cdigo USSD


Autor: Jorge Tern
La empresa telefnica est implementando los cdigos USSD para comunicarse con los
telfonos celulares de sus clientes para los cual te ha contratado con la finalidad de que
elabores un programa que determine si un cdigo USSD es vlido.
Los cdigos USSD consisten de un texto que contiene un caracter asterisco seguido de
un nmero de tres caracteres numricos, contina un segundo asterisco, sigue una
cantidad variable de caracteres numricos y termina con un caracter numeral. Por
Ejemplo: *109*123456# .
Se consideran cdigos validos los que cumplen esta especificacin.

Entrada
La primera lnea contiene el nmero de casos de prueba. Las lneas siguientes
contienen un caso de prueba.

Salida
Por cada caso de prueba imprima la frase "bien" si la cadena de caracteres es un
cdigo USSD valido "mal" si es cdigo 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

Alberto J. Suxo Riveros

14

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Cdigo USSD
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

SubProceso resultado <- NoEsValido( car )


Definir resultado Como Logico;
Si car="0" | car="1" | car="2" | car="3" | car="4" | car="5" |
car="6" | car="7" | car="8" | car="9" Entonces
resultado <- falso;
Sino
resultado <- verdadero;
FinSi
FinSubProceso
Proceso CodigoUSSD
Definir casos, tam, i, j Como Entero;
Definir cad, num Como Caracter;
Definir sw Como Logico;
Leer casos;
Para i<-1 Hasta casos Hacer
Leer cad;
Si Subcadena(cad,0,0)<>"*" Entonces
Escribir "mal";
Sino
Si Subcadena(cad,4,4)<>"*" Entonces
Escribir "mal";
Sino
tam <- Longitud(cad);
Si Subcadena(cad,tam-1, tam-1)<>"#" Entonces
Escribir "mal";
Sino
sw <- Verdadero;
num <- Subcadena(cad,1,4);
Escribir num;
Para j<-0 Hasta 2 Hacer
Si NoEsValido( Subcadena(num,j,j) ) Entonces
sw <- falso;
FinSi
FinPara
Si sw Entonces
num <- Subcadena(cad,5,tam-1);
Escribir num;
Para j<-0 Hasta Longitud(num)-2 Hacer
Si NoEsValido( subcadena(num,j,j) ) Entonces
sw <- falso;
FinSi
Alberto J. Suxo Riveros

15

ACM ICPC Bolivia


FinPara
FinSi
Si sw Entonces
Escribir "bien";
Sino
Escribir "mal";
FinSi
FinSi
FinSi
FinSi
FinPara
FinProceso

Alberto J. Suxo Riveros

16

ACM ICPC Bolivia

Problema C: Sumando Fibonacci


Autor: Jorge Tern
La serie de Fibonacci es aquella que se forma por la expresin f(n) = f(n - 1) + f(n - 2).
Los primeros nmeros de la serie son 1, 1, 2, 3, 5, 8, 13, 21,
Podemos representar cada nmero entero como una suma de nmeros Fibonacci. Por
ejemplo el nmero 33 puede expresarse como:
33 = 1 * 1 + 0 * 2 + 1 * 3 + 0 * 5 + 1 * 8 + 0 * 13 + 1 * 21
Tomando solamente los nmeros binarios tendramos
Fib(33) = 1010101
Otros ejemplos son:
Fib(18) = 000101
Fib(6) = 1001

Entrada
La entrada de datos consiste en una lnea con la representacin de un nmero como la
suma de nmeros Fibonacci. Termina cuando no hay ms datos. Vea que cuando lea la
lnea de entrada leer caracteres 1 y 0 que se representan como los ascii 48 y 49
respectivamente.

Salida
La salida consiste en el nmero entero representado por la representacin leda. Se
imprime un nmero en una lnea por cada lnea de entrada.

Ejemplos de entrada
1010101
000101
1001
Ejemplos de salida
33
18
6

Alberto J. Suxo Riveros

17

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Sumando Fibonacci
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Fibo
Definir linea Como Caracter;
Definir tam, i, valor Como Entero;
Definir vec Como Entero;
Dimension vec[100];
Leer linea;
tam <- Longitud( lnea );
vec[0] <- 1;
vec[1] <- 2;
Para i<-2 Hasta tam Hacer
vec[i] <- vec[i-1] + vec[i-2];
FinPara
valor <- 0;
Para i<-0 Hasta tam-1 Hacer
Si Subcadena( linea, i, i )="1" Entonces
valor <- valor + vec[i];
FinSi
FinPara
Escribir valor;
FinProceso

Alberto J. Suxo Riveros

18

ACM ICPC Bolivia

Problema D: Leones
Autor: Leticia Blanco
En la selva se han mimetizado varios leones, grrrrr....., debemos pasar la selva.... es
necesario.... pero no queremos morir....... :S, - piensa Hugo; pero como debe guardar
compostura y mantener la calma con sus hermanos Paco y Luis; no muestra su temor.
Ms al contrario ha decidido buscar cuntos leones hay mimetizados para saber el
nmero de balas que debe cargar si es necesario tomar alguna medida de emergencia.
Pero hay un problema y es que la selva de letras que deben atravesar puede ser muy
tupida y complicada; por lo que ha decidido recordar sus dotes de programador y no ha
tenido xito. Por lo que ha solicitado que escribas un programa para encontrar el
nmero de leones, dado que se tiene la selva de letras.

Entrada
La entrada consiste de un nmero entero n que indica la cantidad de casos, le siguen n
lneas con cadenas de hasta 200 caracteres en mayscula. Cada una de estas cadenas
representa una selva de letras.

Salida
La salida es un nmero entero, que indica la cantidad de leones que hay en la selva.

Ejemplos de entrada
2
SELVADELEJEMPLODONDESEENCUNETRANDOSLEONES
LEONIDASUNGRANGUERRERODELAANTIGUAGRECIA
Ejemplos de salida
2
1

Alberto J. Suxo Riveros

19

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Leones
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

SubProceso posi <- buscar (selva, letra, pos )


Definir posi Como Entero;
Definir i Como Entero;
posi <- -1;
i <- pos ;
Mientras i < Longitud(selva) & posi = -1 Hacer
Si Subcadena(selva,i,i) = letra Entonces
posi <- i;
FinSi
i <- i + 1;
FinMientras
FinSubProceso
// retornar 'posi'
SubProceso cant <- contarLeon ( selva )
Definir cant Como Entero;
Definir pos, i Como Entero;
Definir leon, letra Como Caracter;
leon <- "LEON";
i <- 0;
pos <- 0;
cant <- 0;
Mientras pos <> -1 Hacer
Si i < 4 Entonces
letra <- Subcadena( leon, i, i );
pos <- buscar ( selva, letra, pos );
Si pos <> -1 Entonces
pos <- pos + 1;
FinSi
i <- i + 1;
FinSi
Si i = 4 & pos <> -1 Entonces
cant <- cant + 1;
i <- 0;
FinSi
FinMientras
FinSubProceso
// retornar 'cant'
Proceso Leones
Definir n, i Como Entero;
Definir selva Como Caracter;
Leer n;
Para i <- 1 Hasta n Hacer
Leer selva;
Escribir contarLeon( selva );
FinPara
FinProceso
Alberto J. Suxo Riveros

20

ACM ICPC Bolivia

Problema E: Nmero de la suerte


Autor: Jorge Tern
En la teora de nmeros, un nmero de la suerte es un nmero natural en un conjunto
que se genera por una criba similar a la Criba de Eratstenes que genera los nmeros
primos.
Comenzando con una lista de nmeros 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 nmeros de dos en dos, todos los nmeros pares; en esta primera
iteracin slo quedan los nmeros impares:
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25,
El segundo trmino de esta secuencia es 3. Entonces se eliminan todos los nmeros de
tres en tres:
1, 3, 7, 9, 13, 15, 19, 21, 25,
El tercer nmero que ha quedado es 7, as que cada sptimo nmero que queda se
elimina:
1, 3, 7, 9, 13, 15, 21, 25,
Dado que este procedimiento se repite indefinidamente, los sobrevivientes son los
nmeros 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,
La lista anterior es tambin la lista de nmeros de la suerte menores a 100.

Entrada
No existe entrada como tal, el estudiante debe asumir que buscamos los nmeros de la
suerte menores a 200.

Salida
Imprima en una lnea cuantos nmeros de la suerte existen menores a 200. Por
ejemplo, para 100 es 23.

Alberto J. Suxo Riveros

21

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Nmero de la suerte
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

// Cuenta el nmero de elementos del vector 'numeros'


SubProceso resultado <- tam ( numeros )
Definir resultado Como Entero;
Definir i como entero;
i <- 0;
Mientras numeros[i] > 0 Hacer
i <- i + 1;
FinMientras
resultado <- i;
FinSubProceso
// Quita el elemento i del vector 'numeros'
SubProceso quitar( numeros, i )
Definir j Como Entero;
j <- i;
Mientras numeros[j]>0 hacer
numeros[j]<-numeros[j+1];
j <- j + 1;
FinMientras
FinSubProceso
Proceso Suerte
Definir max, i, j, vil, c, a, it, numerosTam Como Entero;
Definir numeros Como Entero;
Definir sw Como Logico;
max <- 200; // <- buscamos en entre los primeros 200
Dimension numeros[201];
i <- 1;
j <- 0;
Mientras i <= max Hacer
numeros[j] <- i;
i <- i + 2;
j <- j + 1;
FinMientras
sw <- Verdadero;
numeros[j] <- 0;
it <- 1;
Mientras sw Hacer
vil <- numeros[it];
it <- it + 1;
numerosTam <- tam( numeros );
c <- numerosTam % vil;
Alberto J. Suxo Riveros

22

ACM ICPC Bolivia


a <- numerosTam - c - 1;
Si vil >= numerosTam Entonces
sw <- falso;
Sino
i <- a;
Mientras i>1 Hacer
quitar( numeros, I );
i <- i - vil;
FinMientras
FinSi
FinMientras
Escribir numerosTam;
FinProceso

Alberto J. Suxo Riveros

23

ACM ICPC Bolivia

Problema F: Aritmtica Maya


Autor: Jorge Tern
Los Mayas tenan una forma de escribir nmeros que les permita hacer los clculos.
La notacin de sus nmeros era con puntos y rayas que las representaremos por
guiones. Cada punto representa la unidad y una raya representa 5 unidades.
Veamos: -.. representara el nmero 7, esto es una raya cinco ms dos puntos da
siete. Cada vez que tenemos 5 unidades, o sea 5 puntos se cambian por una raya. El
nmero ms grande que se puede representar es el 20 que son cuatro rayas. Como
ejemplo veamos el siguiente nmero Maya

--.
..
-...
--Cada una de las lneas representa un dgito Maya, por lo que las 4 lneas representan
los dgitos 11, 2, 8, 15 que en notacin decimal es 88975. El dgito 0 se representa con
un cero en una sola lnea. El digito menos significativo es el 15.

Entrada
La entrada contiene mltiples casos de entrada. La primera lnea tiene el nmero de
casos de prueba.
Cada caso de prueba contiene 4 lneas. Cada lnea contiene un nmero de cuatro
dgitos en representacin Maya.

Salida
Imprima en una lnea el equivalente decimal del nmero Maya.

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

Alberto J. Suxo Riveros

Ejemplos de salida
88975
8000
88400
5

24

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Aritmtica Maya
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Maya
Definir casos, c1, decimal, i, j, unos, cincos Como Entero;
Definir maya Como Caracter;
Leer casos;
Para c1<-1 Hasta casos hacer
decimal <- 0;
Para i<-0 Hasta 3 hacer
Leer maya;
unos <- 0;
cincos <- 0;
Para j<-0 Hasta Longitud(maya)-1 Hacer
Si Subcadena(maya,j,j)="-" Entonces
cincos <- cincos + 1;
Finsi
Si Subcadena(maya,j,j)="." Entonces
unos <- unos + 1;
finsi
finpara
decimal <- decimal*20+(cincos*5+unos);
finpara
escribir decimal;
finpara
FinProceso

Alberto J. Suxo Riveros

25

ACM ICPC Bolivia

Problema G: Narcisos
Autor: Leticia Blanco
Como te imaginars en el mundo de los nmeros hay variedad de sociedades, una muy
marcada es la comunidad de narcisistas. Estos ciudadanos son especiales y tienen
niveles de alcurnia que estn denotados por e, por ejemplo el 153 es un narcisista de
nivel 3, ya que la suma de sus cifras elevadas al cubo suman el mismo nmero: 153 =
13 + 53 + 33.
En general un nmero narciso num que tiene la forma: dnd3d2d1d0, se dice que es
narcisista de nivel de alcurnia e, si se cumple que num = dne ++ d3e + d2e + d1e + d0e.
En esta comunidad especial, es necesario identificar el nivel de alcurnia de algunos
nmeros si son narcisos. Para ello se cuenta con el nmero y sobre la base de esta
informacin debes decidir cul es el nivel de alcurnia del narciso.
Se sabe que en esta comunidad ningn narciso tiene nivel de alcurnia menor a 2 ni
mayor a 6.
Por supuesto, hay nmeros que quieren pasar por narcisos, en caso de no demostrar su
alcurnia dentro los caones de la comunidad, se debe emitir -1 como respuesta.

Entrada
La entrada consiste de un nmero entero c que indica la cantidad de casos. En las
prximas c lneas estn los nmeros que quieren demostrar su nivel de narcisismo.

Salida
La salida por cada caso es el nivel de alcurnia del supuesto narciso.

Ejemplos de entrada
3
153
1
22
Ejemplos de salida
3
2
-1

Alberto J. Suxo Riveros

26

ACM ICPC Bolivia


Solucin
// Olimpiada Boliviana De Informatica
// Problema : Narcisos
// Autor
: Alberto Suxo
// Copyright: Team SIM
// Lenguaje : Pseudocodigo PSeInt
// *******************************
SubProceso procesar( n )
Definir res, suma, copia, i Como Entero;
Definir narciso Como Logico;
narciso <- falso;
i <- 2;
Mientras i <= 6 & ~ narciso Hacer
copia <- n;
suma <- 0;
mientras copia > 0 Hacer
suma <- suma + (copia%10)^i;
copia <- copia / 10;
FinMientras
narciso <- (suma=n);
res <- i;
i <- i + 1;
FinMientras
Si narciso Entonces
Escribir res;
Sino
Escribir -1;
FinSi
FinSubProceso
Proceso Narcisos
Definir n, i, num Como Entero;
Leer n;
Para i<-1 Hasta n Hacer
Leer num;
procesar( num );
FinPara
FinProceso

Alberto J. Suxo Riveros

27

ACM ICPC Bolivia

Fase 2 - Regional
Problema A: Trinomios Triangulares
Autor: Jorge Tern
Consideremos la siguiente expresin:
(1 + x + x2)n
Dado un valor de n se quiere conocer cul es valor de los coeficientes de la expresin.
Por ejemplo si n toma el valor de 1 los trminos de la expresin son 1, 1, 1. Cuando n =
2 tenemos 1 + 2x + 3x2 + 2x3 + x4 por lo que la respuesta es 1, 2, 3, 2, 1

Entrada
La primera lnea contiene un nmero que indica el nmero de casos de prueba. En una
lnea viene un caso de prueba que contiene el numero 0 n 40 exponente de la
expresin.

Salida
Por cada caso de prueba su programa debe escribir en una lnea y separados por un
espacio los coeficientes del polinomio resultante.

Ejemplos de entrada
3
1
2
0
Ejemplos de salida
1 1 1
1 2 3 2 1
1

Alberto J. Suxo Riveros

28

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Trinomios Triangulares
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Trinomiales
// pre-calculamos todo
// debemos llegar a la siguiente matriz:
// 1 0 0
// 1 1 1 0 0
// 1 2 3 2 1 0 0
// 1 3 6 7 6 3 1 0 0
// 1 .....
Definir Mat Como Entero;
Definir i, j, k, sum Como Entero;
Definir casos, n Como Entero;
Dimension Mat[41,84];
Mat[0,0] <- 1;
Mat[0,1] <- 0;
Mat[0,2] <- 0;
Para i<-1 hasta 40 hacer
Para j<-0 Hasta i*2 Hacer
sum <- 0;
Para k<-(j-2) Hasta j Hacer
Si k>=0 entonces
sum <- sum + Mat[i-1,k];
FinSi
FinPara
Mat[i,j] <- sum;
FinPara
Mat[i,i*2+1] <- 0;
Mat[i,i*2+2] <- 0;
FinPara
// Leemos los datos
Leer casos;
Mientras casos>0 Hacer
Leer n;
casos <- casos - 1;
j <- 0;
Mientras Mat[n,j]>0 Hacer
Escribir Mat[n,j];
j <- j + 1;
FinMientras
FinMientras
FinProceso

Alberto J. Suxo Riveros

29

ACM ICPC Bolivia

Problema B: Calculadora Inca


Autor: Jorge Tern
La Calculadora de los Incas denominada Yupana consiste de una base parecida a la
base binaria. Los nmeros se representan por varios unos y ceros que se dividen en 4
grupos como se muestra:
00000

000

00

Cada grupo representa a un nmero especfico y corresponden a los nmeros 5, 3, 2, 1.


Cuando queremos representar un nmero simplemente colocamos en 1 en algunos de
los 0 de las columnas. Por ejemplo para representar el numero 12 escogemos dos
nmeros de la columna de los cincos y uno de la columna del dos y escribimos:
00011

000

01

Un mismo nmero puede tener mltiples representaciones. La siguiente tabla muestra


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.

Entrada
La primera lnea contiene un nmero que indica el nmero de casos de prueba. Cada
caso de prueba contiene una lnea con la representacin en el formato de la Yupana
que consiste en 11 nmeros 1 o ceros.

Salida
Por cada caso de prueba su programa debe escribir en una lnea y separados por un
espacio la representacin en formato decimal del nmero en formato de Yupana.

Ejemplos de entrada
5
00000000010
00000000110
00011000000
00000011000
00001000001

Alberto J. Suxo Riveros

Ejemplos de salida
2
4
10
6
6

30

ACM ICPC Bolivia

Solucin
// Olimpiada Boliviana De Informatica
// Problema : Calculadora Inca
// Autor
: Alberto Suxo
// Copyright: Team SIM
// Lenguaje : Pseudocodigo PSeInt
// *******************************
Proceso CalculadoraInca
Definir casos, i, total Como Entero;
Definir cad Como Caracter;
Leer casos;
Para i<-1 Hasta casos Hacer
total <- 0;
Leer cad;
Si Subcadena(cad, 0, 0) = "1" Entonces
total <- total + 5;
FinSi
Si Subcadena(cad, 1, 1) = "1" Entonces
total <- total + 5;
FinSi
Si Subcadena(cad, 2, 2) = "1" Entonces
total <- total + 5;
FinSi
Si Subcadena(cad, 3, 3) = "1" Entonces
total <- total + 5;
FinSi
Si Subcadena(cad, 4, 4) = "1" Entonces
total <- total + 5;
FinSi
Si Subcadena(cad, 5, 5) = "1" Entonces
total <- total + 3;
FinSi
Si Subcadena(cad, 6, 6) = "1" Entonces
total <- total + 3;
FinSi
Si Subcadena(cad, 7, 7) = "1" Entonces
total <- total + 3;
FinSi
Si Subcadena(cad, 8, 8) = "1" Entonces
total <- total + 2;
FinSi
Si Subcadena(cad, 9, 9) = "1" Entonces
total <- total + 2;
FinSi
Si Subcadena(cad, 10, 10) = "1" Entonces
total <- total + 1;
FinSi
Escribir total;
FinPara
FinProceso

Alberto J. Suxo Riveros

31

ACM ICPC Bolivia

Problema C: Aritmtica
Autor: Hernan Payrumani
En la clase de matemtica el profesor a veces se siente cansado y para que el tiempo pase
rpido da de tarea unas operaciones aritmticas.
Las operaciones a veces son cortas como 10 dgitos de longitud, pero a veces son largas
con 100 dgitos de longitud.
Es estos das donde tu profesor esta aburrido t tambin lo estas, por eso prefieres que tu
computadora resuelva estos ejercicios de aritmtica, por lo tanto primero debes escribir
un programa que te devuelva los resultados de estas operaciones
Entrada
La Primera lnea contiene el nmero de casos de entrada, cada caso de entrada contiene 3
lneas.
La primera lnea contiene un entero positivo x, el primer operando.
La segunda lnea contiene un caracter + o *representando la suma y la multiplicacin.
La tercera lnea contiene un entero positivo y, el segundo operando.
Los enteros x e y son potencias de 10 de hasta 10 dgitos.
Salida
El resultado de la operacin entre x e y.
Ejemplos de entrada
4
1000
*
100
10000
+
10
10
+
1000
1
*
1000
Ejemplos de salida
100000
10010
1010
1000

Alberto J. Suxo Riveros

32

ACM ICPC Bolivia

Solucin
// Olimpiada Boliviana De Informatica
// Problema : Aritmetica
// Autor
: Alberto Suxo
// Copyright: Team SIM
// Lenguaje : Pseudocodigo PSeInt
// *******************************
SubProceso Multiplicar( A, B )
Definir tamB, i Como Entero;
Definir resultado Como Caracter;
resultado <- A;
tamB <- Longitud( B );
i <- 1;
Mientras i < tamB Hacer
resultado <- Concatenar( resultado, "0" );
i <- i + 1 ;
FinMientras
Escribir resultado;
FinSubProceso
SubProceso Sumar( A, B )
Definir tamA, tamB, max, i, sum Como Entero;
Definir resultado Como Caracter;
tamA <- Longitud( A );
tamB <- Longitud( B );
Si tamA > tamB Entonces
max <- tamA;
Sino
max <- tamB;
FinSi
tamA <- tamA - max;
tamB <- tamB - max;
resultado <- "";
Para i<-0 Hasta max-1 Hacer
sum <- 0;
Si tamA>=0 & Subcadena(A,tamA,tamA)="1" Entonces
sum <- sum + 1;
FinSi
Si tamB>=0 & Subcadena(B,tamB,tamB)="1" Entonces
sum <- sum + 1;
FinSi
Segun sum Hacer
0: resultado <- Concatenar(resultado, "0" );
1: resultado <- Concatenar(resultado, "1" );
2: resultado <- Concatenar(resultado, "2" );
FinSegun
tamA <- tamA + 1;
tamB <- tamB + 1;
FinPara
Escribir resultado;
FinSubProceso
Alberto J. Suxo Riveros

33

ACM ICPC Bolivia

Proceso Aritmerica
Definir casos Como Entero;
Definir i Como Entero;
Definir A, B, op Como Caracter;
Leer casos;
Para i <- 1 Hasta casos Hacer
Leer A, op, B;
Si op= "+" Entonces
Sumar ( A, B );
sino
// entonces op = "*"
Multiplicar ( A, B );
FinSi
FinPara
FinProceso

Alberto J. Suxo Riveros

34

ACM ICPC Bolivia

Problema D: Bender
Autor: Hernan Payrumani
El robot Bender es muy parecido a los humanos, en cuanto al sueo solo duerme bien
cuando no tiene pesadillas.
A diferencia de los humanos Bender suea solo con dgitos binarios 0 y 1. Bender tiene
pesadillas cuando suea con dgitos distintos a 0 y 1.
Por ejemplo si Bender suea con 001111000111 el tendr un dulce sueo. Pero si
Bender suea con 1110011111120000 Bender tendr una pesadilla.

Entrada
La primera lnea de entrada contiene el nmero de casos a ser evaluados.
La primera lnea de cada caso contiene c y f el nmero de columnas y filas de una
matriz. Las siguientes lneas contienen f lneas con c dgitos entre 0 y 9.

Salida
Si la matriz solo contienen dgitos binarios 0, 1, imprime Dulce. Si la matriz contiene
algn dgito que no es binario imprime Pesadilla

Ejemplos de entrada
2
3 3
111
101
011
4 4
1110
0233
1111
0000
Ejemplos de salida
Dulce
Pesadilla

Alberto J. Suxo Riveros

35

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Bender
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Bender
Definir n, m, i, j, casos, k Como Entero;
Definir resultado, linea Como Caracter;
Definir aux Como Caracter;
Leer casos;
Para k<-1 Hasta casos Hacer
Leer n, m;
resultado <- "Dulce";
Para i<-1 Hasta n Hacer
Leer linea;
Para j<-0 Hasta m-1 Hacer
aux <- Subcadena(linea, j, j);
Si aux<>"0" & aux<>"1" Entonces
resultado <- "Pesadilla";
FinSi
FinPara
FinPara
Escribir resultado;
FinPara
FinProceso

Alberto J. Suxo Riveros

36

ACM ICPC Bolivia

Problema E: Eratstenes
Autor: Hernan Payrumani
La criba de Eratstenes es un famoso algoritmo para buscar todos los nmeros primos
hasta N. El algoritmo es:
1. Escribir todos los nmeros entre 2 y N inclusive.
2. Buscar el menor nmero no tachado y llamarlo P, donde P es primo.
3. Dejando fuera P, tachar todos los mltiplos que an no estn tachados.
4. Si todos los nmeros no han sido tachados ir al paso 2.
Escribe un programa que dado un nmero N y K encuentre el K-esimo entero que ser
tachado.

Entrada
La primera lnea indica el nmero de casos a ser evaluados.
Cada caso consiste en dos enteros N y K (2 K < N 1000)

Saluda
Imprimir el K-esimo nmero 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 sptimo
nmero es 9.

Alberto J. Suxo Riveros

37

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Eratostenes
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Eratostenes
Definir n, k, vec, cont, i, j, casos, k Como Entero;
Dimension vec[500];
Leer casos;
Para k<-1 Hasta casos Hacer
Leer n;
Leer k;
cont <- 0;
Para i<-2 Hasta n Hacer
vec[i] <- 0;
FinPara
Para i<-2 Hasta n Hacer
Si vec[i]=0 Entonces
Para j<-i Hasta n Con Paso i Hacer
Si vec[j] = 0 Entonces
vec[j] <- 1;
cont <- cont + 1;
Si cont = k Entonces
Escribir j;
FinSi
FinSi
FinPara
FinSi
FinPara
FinPara
FinProceso

Alberto J. Suxo Riveros

38

ACM ICPC Bolivia

Problema F: Examen
Autor: Hernan Payrumani
Alvaro, Edwin y Gabriel darn un examen para ingresar a un instituto, este instituto tiene
la peculiaridad de siempre realizar exmenes de seleccin mltiple.
Desafortunadamente ellos no siempre tienen tiempo de estudiar pero quieren
aprovechar que se les dar un examen de seleccin mltiple, ya que ellos tienen una
teora sobre estos.
Alvaro dice que tendr mejor nota utilizando la secuencia: A, B, C, A, B, C, A, B, C ...
Edwin est 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 as determinar quin
de los tres tena razn con su secuencia, la cual es la que contiene ms respuestas
correctas.

Entrada

La primera lnea contiene un entero N (1 N 100), la cantidad de preguntas en el


examen.
La segunda lnea contiene una cadena con N letras A, B, C Estas son en orden las
respuestas correctas de las preguntas del examen.

Salida
En la primera lnea imprime M, la cantidad mxima de respuestas correctas de uno de
los tres.
Despus imprime los nombres de los chicos en orden alfabtico de quienes tienen M
respuestas correctas.

Ejemplos de entrada
5
BAACC
9
AAAABBBBB
Ejemplos de salida
3 Edwin
4 Alvaro Edwin Gabriel

Alberto J. Suxo Riveros

39

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Examen
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Examen
Definir len Como Entero;
Definir linea, abc, babc, ccaabb Como Caracter;
Definir ptsAlvaro, ptsEdwin, ptsGabriel Como Entero;
Definir i, maximo Como Entero;
Definir car Como Caracter;
abc <- "ABC";
babc <- "BABC";
ccaabb <- "CCAABB";
Leer len;
Leer linea;
ptsAlvaro <- 0;
ptsEdwin <- 0;
ptsGabriel <- 0;
Para i<-0 Hasta len-1 hacer
car <- Subcadena( linea, i, i );
Si car = Subcadena( abc, i%3, i%3) Entonces
ptsAlvaro <- ptsAlvaro + 1;
FinSi
Si car =Subcadena( babc, i%4, i%4) Entonces
ptsEdwin <- ptsEdwin + 1;
FinSi
Si car = Subcadena( ccaabb, i%6, i%6 ) Entonces
ptsGabriel <- ptsGabriel + 1;
FinSi
FinPara
// encontrar el maximo
maximo <- 0;
Si ptsAlvaro > maximo Entonces
maximo <- ptsAlvaro;
FinSi
Si ptsEdwin > maximo Entonces
maximo <- ptsEdwin;
FinSi
Si ptsGabriel > maximo Entonces
maximo <- ptsGabriel;
FinSi
// imprimir la respuesta
Escribir maximo;
Si ptsAlvaro = maximo Entonces
Escribir "Alvaro";
FinSi
Si ptsEdwin = maximo Entonces
Alberto J. Suxo Riveros

40

ACM ICPC Bolivia


Escribir "Edwin";
FinSi
Si ptsGabriel = maximo Entonces
Escribir "Gabriel";
FinSi
FinProceso

Alberto J. Suxo Riveros

41

ACM ICPC Bolivia

Problema G: Lago
Autor: Alvaro Rolas
El lago Titicaca es el ms alto y navegable del mundo, se encuentra a 3900 m sobre el
nivel del mar.
Este 2012 vinieron cientficos reconocidos de Europa para poder hacer un anlisis e
investigaciones en el lago.
La primera curiosidad que tienen es calcular el rea (que es un polgono) del lago.
Para tal propsito pudieron sacar las coordenadas x, y para poder calcular dicha rea.
Necesitan tu ayuda como participante IOI para poder calcular dicha rea del lago.
Se te darn coordenadas x y de manera ordenada y t deberas retornar el rea
obtenida del lago.

Entrada
La entrada inicia con un entero N (Nmero de puntos x,y), seguidamente ser listado N
puntos xi, yi La entrada termina cuando N sea igual a 0. (3 n 50000), (10000 x, y
10000).

Salida
Retornar el rea del polgono.

Ejemplos de entrada
3
0 0
1 0
0 1
0
Ejemplos de salida
0.50

Alberto J. Suxo Riveros

42

ACM ICPC Bolivia

Solucin
// Olimpiada Boliviana De Informatica
// Problema : Lago
// Autor
: Alberto Suxo
// Copyright: Team SIM
// Lenguaje : Pseudocodigo PSeInt
// *******************************
// Debe saber que el area de un poligono irregular se calcula
// de la siguiente forma, dados los puntos:
// P_1 = (x_1, y_1)
// P_2 = (x_2, y_2)
// .
// :
// P_n = (x_n, y_n)
//
// el rea se calcula mediante la frmula determinante de Gauss
//
| x_1
y_1 |
//
| x_1
y_1 |
//
| x_1
y_1 |
// Area = _1_ | .
. |
//
2 | :
: |
//
| x_n
y_n |
//
| x_1
y_1 |
Proceso Lago
Definir n, sumas, i Como Entero;
Definir X, Y Como Entero;
Definir area Como Real;
Dimension X[50001];
Dimension Y[50001];
Leer n;
Mientras n>0 Hacer
// Leer coordenadas
Para i<-1 Hasta n Hacer
Leer X[i]; // Leer un entero en la posicion i del vector X
Leer Y[i];
FinPara
// se copia la 1ra coordenada al final de los vectores X y Y
X[n+1] <- X[1];
Y[n+1] <- Y[1];
// Se asume que los puntos estan ordenados
// pro lo que no es necesario ordenarlos aqui
sumas <- 0;
Para i<-1 Hasta n Hacer
sumas <- sumas + (X[i]*Y[i+1] - X[i+1]*Y[i] );
FinPara
area <- sumas / 2.0;
Escribir area;
Leer n;
// terminos cuando n=0
FinMientras
FinProceso

Alberto J. Suxo Riveros

43

ACM ICPC Bolivia

Problema H: Qumica
Autor: Hernan Payrumani
Lucas est jugando otra vez en la clase de qumica. En vez de estar balanceando
ecuaciones l est escribiendo secuencias codificadas en un papel. Lucas modifica
cada palabra adicionando despus de cada vocal la letra p y luego la misma vocal de
nuevo.
Por ejemplo, l 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 codificadas y desea saber que escribi.
Escribe un programa que decodifique lo que escribi Lucas.

Entrada
En la primera lnea se indica el nmero de casos que debern ser evaluados.
Cada una de las siguientes lneas es un caso de prueba que es una lnea que contiene
la sentencia codificada. La secuencia contiene solo letras minsculas y espacios. Las
palabras estarn separadas por un solo espacio y no habr espacios de ms al inicio o
al final. La cantidad total de caracteres no sobrepasara los 100.

Salida
Imprime la sentencia decodificada en una sola lnea.

Ejemplos de entrada
2
zepelepenapa papapripikapa
bapas jepe doposapadgapa opovapa kepemipijapa
Ejemplos de salida
zelena paprika
bas je dosadga ova kemija

Alberto J. Suxo Riveros

44

ACM ICPC Bolivia

Solucin
//
//
//
//
//
//

Olimpiada Boliviana De Informatica


Problema : Quimica
Autor
: Alberto Suxo
Copyright: Team SIM
Lenguaje : Pseudocodigo PSeInt
*******************************

Proceso Quimica
Definir linea, car, resultado Como Caracter;
Definir i, tam, casos Como Entero;
Leer casos;
Mientras casos > 0 Hacer
casos <- casos - 1;
Leer linea;
tam <- Longitud(linea);
i <- 0;
resultado <- "";
Mientras i < tam Hacer
car <- Subcadena( linea, i, i );
resultado <- Concatenar( resultado, car );
i <- i + 1;
Si car="a" | car="e" | car="i" | car="o" | car="u" Entonces
i <- i + 2;
FinSi
FinMientras
Escribir resultado;
FinMientras
FinProceso

Alberto J. Suxo Riveros

45

ACM ICPC Bolivia

Anexo
Opciones del Lenguaje
La ICPC- Bolivia ha visto por conveniente utiliza PSeInt como herramienta para
programacin y ejecucin de diagramas de flujo.
PSeInt puede ser encontrado en el siguiente enlace:
http://pseint.sourceforge.net
Una instalada la Herramienta PSeInt, PSeInt le preguntar Cul opcin de lenguaje
utilizar.
El presente documento est desarrollado bajo la opcin de lenguaje Estricto

Alberto J. Suxo Riveros

46

ACM ICPC Bolivia

PSeInt
El presente anexo no pretende ser un manual de PSeInt, simplemente se listarn
algunas de las opciones que ofrece PSeInt al estudiante. Nosotros lo utilizaremos ya
que hace fcil al estudiante migrar del pseudocdigo a su respectivo lenguaje, adems,
PSeInt ofrece la posibilidad a futuro de exportar el Pseudocdigo a lenguaje C (esto
est an en fase experimental).

Comentarios
Los comentarios sin segmentos que no afectan el flujo del programan, inicial con // y
son utilizados para adicionar aclaraciones del cdigo que por s mismas no son muy
intuitivas.
Tambin se debe aclarar que los comentarios son segmentos de documentacin
aclaratoria que es considerada como una buena prctica.
Ejemplo
// Todo o que sigue a esos dos /s es un comentario
// y jams se ejecuta.

Tipos de Datos
PSeInt soporta 4 tipos de datos.
Entero
Acepta valores enteros
Real
Acepta valore decimales
Logico
Acepta solo valores lgicos (verdadero o falso)
Caracter
Acepta caracteres y cadenas.
Para definir una o ms variables usamos la siguiente sintaxis:
Sintaxis
Definir <variable1> [,<variable2>,...,<variableN>] Como <Tipo>
Ejemplo:
Definir linea Como Caracter;
Ejemplo:
Definir x, y como Real;

Asignacin
Primero evala la expresin de la derecha y luego asigna el resultado a la variable de la
izquierda. (Deben coincidir en tipo).
Sintaxis:
<variable> <- <expresin> ;
Ejemplo:
nombre <- "Juan Perez";
Ejemplo:
contador <- contador + 1 ;

Operaciones o instrucciones
Representaremos las operaciones de forma simple y lo ms claro posible.
Ejemplos:
resultado <- 12 * 4 ;
costo <- (resultado * 2) + 7 ;
hipotenusa <- raiz( a*a + b*b ) ;

Alberto J. Suxo Riveros

47

ACM ICPC Bolivia

Operadores
La jerarqua de los operadores matemticos es igual a la del algebra, y puede alterarse
mediante el uso de parntesis.
Operador
Relacionales
>
<
=
<=
>=
<>
Lgicos
&
|
~
Algebraicos
+
*
/
^

Significado

Ejemplo

Mayor que
Menor que
Igual que
Menor o igual que
Mayor i igual que
Distinto que

3 > 2
10 < 50
4 = 5
2 <= 2
var >= 0
0 <> 0

Conjuncin ( y )
Disyuncin ( o )
Negacin ( no )

(2<4) & (0=>1) // falso


(2<4) | (0=>1) // verdadero
~( 2 < 4 ) // falso

Suma
Resta
Multiplicacin
Divisin
Potencia

Entrada de datos
Podemos leer variables desde teclado. La entrada es secuencial y cada lnea es
almacenada en cada una de las variables respectivamente. Podemos definir ms de
una variable separndolas con comas.
Sintaxis:
Leer <variable1> [, <variable2>,,<variableN>] ;
Ejemplo:
Leer nombre;
Ejemplo:
Leer x, y, radio;

Salida de datos
Podemos escribir datos en la pantalla, estos datos son los resultados de las
expresiones o los contenidos de las variables. Tambin podemos tener uno o ms
parmetros separados por comas.
Sintaxis:
Escribir <expresion1> [,<expresion2>,,<expresionN>];
Ejemplo:
Escribir "Ingrese un numero: ";
Ejemplo:
Escribir "Resultado: " , x*2 ;

Condicionales
Selectiva si
Las instrucciones selectivas representan instrucciones que pueden o no ejecutarse,
segn el cumplimiento de su condicin.
Alberto J. Suxo Riveros

48

ACM ICPC Bolivia


Sintaxis
Si <condicin> Entonces
Instrucciones
[Sino
Instrucciones]
FinSi
La condicin puede ser simple o compuesta, dando como nico resultado una respuesta
o verdadera o falsa.
Ejemplo
Si edad >= 18 Entonces
Escribir "ya puede votar";
FinSi
La instrucciones selectiva doble es opcional, solo se aplica cuando requerimos realiza
otra tarea cuando no se cumple la condicin.
Ejemplo
Si edad >= 18 Entonces
Escribir "Ya puede votar" ;
Sino
Escribir "esperar una ao ms" ;
Escribir "vuelva a intentar" ;
FinSi

Selectiva mltiple-casos
Permite elegir entre dos o ms posibles grupos de acciones. Evala el contenido de la
variable y selecciona el camino a seguir. La variable debe ser de tipo numrico. Las
opciones se delimitan por los dos puntos al final. Si un grupo de acciones se debe
ejecutar en dos o ms casos, los valores se pueden poner separados por comas en la
misma lnea. La opcin final puede ser De otro modo, y se ejecuta si la variable no
coincide con ninguna de las anteriores.
Sintaxis
Segun <variable> Hacer
<valor1>[,<valor2>,,<valorN>]: <instruccin(es)>;
[<valor>,<valor>:<instriccion(es)>;]
[De Otro Modo: <Instruccin(es)>;]
FinSegun
Ejemplo:
Leer A;
Segun A Hacer
1: Escribir 1;
2,3,5,7: Escribir "es numero primo menor a 10";
De Otro Modo: Escribir "intente de nuevo";
FinSegun

Estructuras iterativas (bucles)


Mientras
Como su nombre lo indica, se repite mientras la condiciones sea verdadera. En el bucle
mientras las instrucciones del contenido pueden o no ser ejecutadas dependiendo de
Alberto J. Suxo Riveros

49

ACM ICPC Bolivia


la condiciones, (de ser inicialmente falsa jams entrar dentro del bucle). Debe contener
dentro alguna accin que pueda modificar la condicin para salir.
Sintaxis
Mientras <condicin> Hacer
<instrucciones>
FinMientras
Ejemplo
edad <-16 ;
Mientras edad<18 Hacer
Escribir edad;
edad <- edad + 1 ;
FinMientras
Escribir "por fin puede votar con: " , edad , " aos" ;
Este programita dar como resultado:
16
17
Por fin puede votar con: 18 aos

Hacer mientras
La estructura Hacer Mientras no es soportada por PSeInt, pero estada definida en
casi todos los lenguajes de programacin.
A diferencia del bucle mientras, en hacer mientras se tiene la seguridad que siempre
se ejecutar por lo menos una vez el contenido del bucle, este contenido se ejecutar
mientras la condicin sea verdadera.
Sintaxis:
Hacer
<instrucciones>;
Mientras <condicin>;
Ejemplo
ahorro <-10 ;
Hacer
ahorro <- ahorro + 10 ;
Escribir "ya tengo Bs. " , ahorro , " de ahorro" ;
Mientras ahorro<97 ;
En este pequeo programita, seguiremos ahorrando hasta tener Bs.100

Bucle Repetir
Algunos lenguajes de programacin implementan el bucle repetir hasta que (ejemplo:
Pascal), sin embargo, en lenguajes como C o Java simplemente no existe, pero se
puede llegar a implementar negando la condicin y utilizando la estructura Hacer
Mientras.
El contenido del bucle se ejecutar hasta que la condicin sea verdadera (o, lo que es lo
mismo con mientras, se ejecutar mientras la condicin sea falsa).
Sintaxis
Repetir
<instrucciones>;
Hasta Que <condicin>;
Alberto J. Suxo Riveros

50

ACM ICPC Bolivia

El equivalente con Hacer Mientras es:


Hacer
<Instrucciones>;
Mientras ~ <condicin> ;
Ejemplo
horasTrabajadas <- 0 ;
Repetir
Escribir "Trabajando" ;
horasTrabajadas <- horasTrabajadas + 1 ;
Hasta Que horasTrabajadas=8 ;

Bucle Para
Quiz la estructura de control ms utilizada, la cual se utiliza cuando se desea iterar un
nmero conocido de veces, empleando una variable como ndice que se incremente (o
decremente).
Sintaxis
Para <variable> <- <valor inicial> Hasta <valor final> [Con Paso
<incremento/decremento>] Hacer
<instrucciones>;
FinPara
El equivalente con mientras es:
<variable> <- <valor inicial>
Mientras <variable> <> <valor final> hacer
<instrucciones>;
<variable> <- <varialbe> + <incremento/decremento> ;
FinMientras
Con Paso es opcional, cuando no est definido el incremento ser de 1:
Ejemplo
Para i <- 1 Hasta 12 Hacer
Escribir "Nmero " , i ;
FinPara
Este ejemplo escribe los nmeros: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 y 12.
Ejemplo:
Para j <- 10 Hasta 0 Con paso -2 Hacer
Escribir j;
FinPara;
En este ejemplo, los nmeros resultantes sern: 10, 8, 6, 4, 2 y 0, en ese orden
respectivamente.

Arreglos
Los arreglos son estructuras de datos unidimensionales (vectores) bidimensionales
(matrices), etc de datos del mismo tipo.

Alberto J. Suxo Riveros

51

ACM ICPC Bolivia


Para cerrar arreglos primero debemos definir su tipo, y luego, definir su tamao de la
siguiente forma:
Sintaxis:
Definir <nombre de arreglo> Como <Tipo de Dato>;
Dimension <nombre de arreglo>[<tamao>[,<tamao>,]];
Para declararlos utilizaremos la palabra arreglo seguido de nombre de la variable y su
tamao.
Ejemplo vector
Definir i Como Entero;
Definir datos Como Entero;
Dimension datos[20];
datos[0] <- 0;
datos[1] <- 1;
Para i<-2 Hasta 19 Hacer
datos[i] <- datos[i-1] + datos[i-2];
FinPara
Escribir "El 20vo numero de Fivonacci es : " , datos[19];
Debemos tener claro que, cuando definimos un vector o matriz, siempre comenzar
desde 0, es decir, si definimos un vector de 20 elementos, las posiciones de esos
elementos sern: 0, 1, 2, 17, 18 y 19, sumando un total de 20 elementos.
Ejemplo matriz
Definir mat, fila, col Como Entero;
Dimension mat[4,6];
Para fila<-0 Hasta 3 Hacer
Para col<-0 Hasta 5 Hacer
mat[fila][col] <- fila + col;
FinPara
FinPara
En este ejemplo podemos ver que una matriz se define por lo general como un arreglo
de dimensionado por filas x columnas, siendo el nmero total de elementos la
multiplicacin de estos datos, (en el ejemplo es 4x6=24).
Tambin podemos ver que los bucles pueden anidarse.

Funciones
En muchas ocasiones, el nmero de instrucciones es muy grande y muchas veces
repetitiva, para lo cual, utilizamos las funciones para simplificar el programa.
Las funciones pueden o no recibir parmetros de entrada, y, no siempre devolver
algn resultado.
Sintaxis
SubProceso [<var resultado> <-] <nombre funcin>[(<paramentos>)]
[Definir <var resultado> Como <Tipo>; ]
<instrucciones>;
[<var resultado> <- <instruccin> ; ]
FinSubProceso

Alberto J. Suxo Riveros

52

ACM ICPC Bolivia


Ejemplo:
SubProceso prom <- Promedio ( arreglo, cantidad )
Definir i como Entero;
Definir suma como Real;
Definir prom como Real;
suma <- 0;
Para i<-0 Hasta cantidad-1 Hacer
suma <- suma + arreglo[i];
FinPara
prom <- suma/cantidad;
FinSubProceso
Proceso Principal
Definir i,N como Entero;
Definir acum,datos,prom como Reales;
Dimension datos[100];
Escribir "Ingrese la cantidad de datos:";
Leer n;
Para i<-0 Hasta n-1 Hacer
Escribir "Ingrese el dato ",i+1,":";
Leer datos[i];
FinPara
Escribir "El promedio es: ",Promedio(datos,n);
FinProceso
PSeInt nos provee de funciones predefinidas

Funciones Matemticas
Funcin
Significado
RC(X)
Raz Cuadrada de X
ABS(X)
Valor Absoluto de X
LN(X)
Logaritmo Natural de X
EXP(X)
Funcin Exponencial de X
SEN(X)
Seno de X
COS(X)
Coseno de X
ATAN(X)
Arco tangente de X
TRUNC(X)
Parte entera de X
REDON(X)
Entero ms cercano a X
La funcin raz cuadrada no debe recibir un argumento negativo.
La funcin exponencial no debe recibir un argumento menor o igual a cero.

Funciones para Cadenas


Funcin
Longitud(x)
Mayusculas(x)
Minusculas(x)
Subcadena(x,inicio,fin)
Concatenar(x,y)

Alberto J. Suxo Riveros

Significado
Retorna la cantidad de caracteres de una cadena x.
Convierte a maysculas la cadena x.
Convierte a minsculas la cadena x.
Extrae una parte de la cadena x indicando desde cual
hasta que letra.
Une las cadenas x y y.

53

You might also like