Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenidos
Examen de Nivel 2 .............................................................................................................. 2
Problema A: Distancia de Hamming .............................................................................. 2
Problema B: Hallando números capicúas ....................................................................... 4
Problema C: Poema......................................................................................................... 6
Problema D: La última esperanza ................................................................................... 8
Problema E: Bolivia Word ............................................................................................ 11
Examen de Nivel 2
Por ejemplo, los números 11010 y 01100 difieren en la primera, tercera y cuarta
posición, así que dan una distancia de Hamming de 3.
Entrada
La primera línea tendrá un número N, que es la cantidad de casos de prueba. Seguido
de N líneas, En cada línea se vienen dos cadenas con las representaciones binarias
separadas por un espacio. Cada cadena tendrá entre 1 y 50 caracteres, inclusive.
Salida
La salida consiste en una línea 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
Solución
#include <iostream>
#include <string>
int main()
{
int N, i, j, cnt;
string a, b;
cin >> N;
for( i=0; i<N; i++ )
{
cin >> a >> b;
cnt = 0;
for( j=0; j<a.length(); j++ )
{
if( a[j] != b[j] )
cnt ++;
}
cout << cnt << endl;
}
return 0;
}
Problema B: Hallando números capicúas
Autor: Jorge Terán
Tome un número, lo invierte, luego lo suma al número original, luego otra vez lo invierte
y lo suma.
Este proceso se repite hasta que la suma sea capicúa o se haya hecho 100 sumas.
Entrada
La primera fila tendrá un número N que es el número de datos de entrada, seguido de N
líneas, cada línea consiste de un numero entero n ≤ 500 un una línea.
Salida
Por cada números de entrada el numero capicúa hallado. Si no existe un imprima la
palabra imposible.
Ejemplo de entrada
2
14
95
Ejemplo de salida
55
1111
Solución
#include <iostream>
int main()
{
int N, i, cnt;
long A, B;
cin >> N;
for( i=0; i<N; i++ )
{
cin >> A;
cnt = 0;
while( cnt < 100 )
{
B = invertir( A );
if( A == B )
{
cout << A << endl;
break;
} else
A = A + B;
cnt ++;
}
if( cnt == 100 )
cout << "imposible" << endl;
}
return 0;
}
Problema C: Poema
Autor: Alberto Suxo
Como cada año, en el colegio de José se organiza todo un evento por el día de la
madre.
Comenzará con un himno, coreografías de bailes, una pequeña obra de teatro, una
banda de estudiantes tocará un tema especialmente dedicado y, por último, un poema,
(a cargo de José).
Pero, José esta 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.
Entrada
La primera línea tendrá un número entero N (0 < N < 1000) que representa el número
de líneas que tendrá el poema.
Cada línea del poema tendrá un máximo de 100 caracteres que contendrá: mayúscula
(A-Z), minúscula (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
Solución
/* Problema : Poema
* Autor : Alberto Suxo
* Copyright: Team SIM
* Lenguaje : C, Ansi-style
******************************/
#include<stdio.h>
#include<ctype.h>
int main()
{
int n, i;
char line[101];
scanf( "%d\n", &n );
while( n-- )
{
gets( line );
for( i=0; line[i]; i++ )
if( esVocal( line[i] ) )
line[i] = '-';
printf( "%s\n" , line );
}
return 0;
}
Problema D: La última esperanza
Autor: Alvaro Rojas
Los Terrans están siendo atacados por los Protoss una raza de Humanoides que
aparecen en la serie Star Craft.
Los Terrans ya casi sin tropas y con poca estructuras solo tienen una esperanza para
vencer en esta guerra contra los Protoss. Y esa esperanza es poder usar el arma más
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 número de estructuras que serán destruidas dadas las coordenadas del blanco
de la bomba nuclear y el radio de alcance de esta.
Entrada
La primera línea es un entero T (1 ≤ T ≤ 100) el número de casos de prueba.
La última línea 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 número 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 gráfico 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.
Solución
/* Problema : La última esperanza
* Autor : Alvaro Rojas
* Lenguaje : C++, Ansi-style
******************************/
#include <cstdio>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int t;
void resolve()
{
vector<pair<double, double> > estructuras;
int n;
scanf( "%d", &n );
for(int i=0;i<n;i++)
{
double x, y; cin >> x >> y;
estructuras.push_back(make_pair<double, double>(x, y));
}
pair<double, double> bombaNuclear;
double radio;
cin >> bombaNuclear.first >> bombaNuclear.second >> radio;
//Revisar todos los puntos x,y
int res = 0;
for(int i=0;i<estructuras.size(); i++)
{
double dist = distancia(estructuras[i], bombaNuclear);
if(distancia(estructuras[i], bombaNuclear) <= radio)
{
res++;
}
}
printf( "%d\n", res );
}
int main()
{
scanf( "%d", &t );
for(int i=0; i<t; i++)
resolve();
}
Problema E: Bolivia Word
Autor: Alvaro Rojas
La organización de la IOI BOLIVIA hizo hacer letras de tamaño 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 están seguros
si con las letras restantes podrán armar las palabras que ellos querían.
Los organizadores piden tu ayuda. Ellos te darán las letras disponibles y quieren saber
si es posible armar la palabra BOLIVIA.
Entrada
La primera línea contendrá un entero N (1 ≤ N ≤ 10) el número de casos de prueba.
A continuación se te dará N líneas, cada una con una cadena (solo mayúsculas), donde
cada carácter 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
Solución
#include <iostream>
#include <string>
int main()
{
int N, i, j;
string linea;
int B, O, L, I, V, A;
cin >> N;
for( i=0; i<N; i++ )
{
cin >> linea;
B = O = L = I = V = A = 0;
for( j=0; j<linea.length(); j++ )
{
switch( linea[j] )
{
case 'B': B++; break;
case 'O': O++; break;
case 'L': L++; break;
case 'I': I++; break;
case 'V': V++; break;
case 'A': A++; break;
}
}
if( B<1 || O<1 || L<1 || I<2 || V<1 || A<1 )
cout << "NO ES POSIBLE" << endl;
else
cout << "ES POSIBLE" << endl;
}
return 0;
}