Professional Documents
Culture Documents
Solucionario Consolidado
Utilizando PSeInt
2da Olimpiada Boliviana de Informtica
Estado Plurinacional de Bolivia, febrero de 2013
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
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
Solucin
//
//
//
//
//
//
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
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
Solucin
//
//
//
//
//
//
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
Solucin
//
//
//
//
//
//
Entrada
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)
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.
Solucin
//
//
//
//
//
//
Entrada
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
10
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
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
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
12
Solucin
//
//
//
//
//
//
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
13
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
14
Solucin
//
//
//
//
//
//
15
16
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
17
Solucin
//
//
//
//
//
//
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
18
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
19
Solucin
//
//
//
//
//
//
20
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.
21
Solucin
//
//
//
//
//
//
22
23
--.
..
-...
--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
-
Ejemplos de salida
88975
8000
88400
5
24
Solucin
//
//
//
//
//
//
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
25
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
26
27
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
28
Solucin
//
//
//
//
//
//
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
29
000
00
000
01
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
Ejemplos de salida
2
4
10
6
6
30
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
31
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
32
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
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
34
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
35
Solucin
//
//
//
//
//
//
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
36
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.
37
Solucin
//
//
//
//
//
//
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
38
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
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
39
Solucin
//
//
//
//
//
//
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
41
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
42
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
43
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
44
Solucin
//
//
//
//
//
//
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
45
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
46
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 ) ;
47
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 )
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
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
49
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
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.
51
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
52
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.
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