Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

Problemas y Soluciones de los Examenes de Preselección para la IOI 2006

Página 1 de 70

Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

Antes de empezar...
Si aún no lo has hecho, para poder entender correctamente las soluciones se recomienda leer los siguientes apuntes y de preferencia en este orden:
1.-http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/cursos/Resolver%20un% 20problema.pdf 2.-http://www.cimat.mx:88/~amor/Omi/Entrenamiento/Combinatoria/Notas_de_Combinatoria.pdf 3.-http://www.cimat.mx:88/~amor/Omi/Entrenamiento/Teoria_Numeros/Teoria_Numeros.htm http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/cursos/analisis_de_complejidad.htm 4.- http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/cursos/estructuras_de_datos.htm http://www.cimat.mx:88/~amor/Omi/Entrenamiento/Grafos/Capitulo1.htm 5.- http://ce.azc.uam.mx/profesores/franz/omi/recursion.html 6.- http://www.olimpiadadeinformatica.org.mx/material%20de%20estudio/cursos/Tecnicas_BUSQUEDAS.htm

Si aún habiendo asimilado estos apuntes encuentras una solución un tanto ambigua, algun error o una solución que valga la pena añadir por favor manda un mail a luison9999@hotmail.com Los problemas comienzan a partir de la página 3 y las soluciones a partir de la página 46

Página 2 de 70

Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

1.- Problemas de Estructuras de Datos
1.1.- Árboles 1.2.- Laberinto 1.3.- Elecciones 1.4.- Buscaminas 1.5.- Agrupando números

Página 3 de 70

Postorden: Se procesa primero el subárbol de la izquierda.-Árboles (acm. La diferencia entre estos recorridos es el orden en que se procesan los nodos. cada uno de los cuales es un árbol binario. después el subárbol de la izquierda y por ultimo el de la derecha Orden: Se procesa primero el subárbol de la izquierda. después la raíz y al final el subárbol de la derecha.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. el orden es el siguiente ● Preorden: se procesa primero el nodo raíz.1.uva.  Existen tres formas comunes de recorrer un árbol binario: preorden.es) Descripción del problema: Un árbol binario es un conjunto finito de elementos que puede estar vació o contener un elemento denominado raíz del árbol y otros elementos y otros elementos divididos en dos subconjuntos separados. 1. Para cada uno de estos recorridos. después el subárbol de la derecha y al final la raíz ● ●   ● ●   Preorden: PLOMIAIAD Orden: OLIMPIADA Página 4 de 70 . Estos dos subconjuntos son denominados subárbol izquierdo y subárbol derecho del árbol original cada elemento de un árbol se denomina un nodo del árbol. orden y postorden.

● Postorden: OIMLIDAAP  PROBLEMA Escribe un programa que dado los recorridos de orden y postorden de un árbol binario escriba como salida el recorrido en preorden. Descripcion de la entrada: Tu programa deberá leer del teclado los siguientes datos. Página 5 de 70 . La primera linea contendrá el numero 1 ≤N≤500 que indica el numero de nodos del árbol.En la tercera linea habrá una una permutación de los numero del 1 al N separados cada uno por un espacio que indican el orden de proceso de los nodos al recorrerlos en postorden Descripcion de la salida: Tu programa deberá escribir en pantalla una unica linea que contenga una permutación de los numeros del 1 al N que indique el orden de proceso de los nodos al recorrerlos en preorden. La segunda linea contendrá una permutación de los numero del 1 al N separados cada uno por un espacio que indican el orden de proceso de los nodos al recorrerlos en orden. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo. Ejemplo: Entrada 9 428516397 485269731 Salida 124583679 Condiciones de ejecución.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

pero el maligno pachus quiere matar a la princesa.Laberinto Descripción del problema: En este problema tu tomas el papel de el gran héroe Colossus tiene la misión de rescatar a la princesa omitilda de un laberinto. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo. 1.Lo único con lo que cuentas es con el mapa del laberinto y el tiempo en el que pachus va a llegar a la princesa. El mapa consta de una cuadricula la cual tiene una 'X' en el lugar donde no puedes pasar Una 'C' donde tú te encuentras al principio. y una 'O' donde se encuentra la hermosa omitilda y una 'L' en aquellos lugares donde el campo este libre y puedas pasar. Las siguientes M líneas contendrán N caracteres que representaran el mapa..2.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Ejemplo:  Entrada 558 XXXXX XCLLX XXXLX XOLLX XXXXX Salida 6 Condiciones de ejecución. por lo que tu tienes que llegar en el menor tiempo posible a ella. En caso de que no puedas llegar a salvarla escribirás en la pantalla un -1 en el caso contrario escribirás el tiempo en el que llegaste a ella  Descripcion de la entrada: Tu programa deberá leer del teclado los siguientes datos: En la primera línea los números 2 < M. Descripcion de la salida: Tu programa deberá escribir un solo número que represente el tiempo en que llegaste ó -1 en caso de que no hayas llegado. N < 500 y T separados por un espacio donde los primeros dos son las dimensiones del laberinto y T el tiempo en que pachus llegara con la princesa. Página 6 de 70 . Problema Tu tarea consiste en escribir un programa que determine el menor tiempo en el que puedes llegar a rescatar a tu princesa tomando en cuenta que tu te mueves a una velocidad de un cuadro por seg.

sin espacios y siempre en mayúsculas) Descripcion de la salida: Tu programa deberá escribir en la pantalla dos lineas.. la primara contendra el nombre de nuestro nuevo presidente y la segunda la cantidad de votos con la cual gano. En cada una de las siguientes N líneas habra el nombre del candidato por el que votaron(el nombre constará de a lo mas 6 caracteres. 1.  NOTA en ningun caso de prueba habrá empates  Ejemplo: Entrada 10 PEJE CARLOS JOSE PEJE PEJE CARLOS LUIS CARLOS PEJE LUIS Salida PEJE 4 Condiciones de ejecución.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. pero. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo. Página 7 de 70 .3. a causa de la mala organización de los organizadores lo único que cuentas es una lista de cada voto hecho por los ciudadanos Descripcion de la entrada: Tu programa deberá leer del teclado los siguientes datos: en la primera línea el número 5<=N<=500000 que representa la cantidad de votos .Elecciones Descripción del problema: Imagina que nos encontramos por ahi del 6 julio del 2006 las elecciones para presidente acaban de terminar y te contrataron para hacer el conteo de votos.

.. .4. representadas por el caracter "*"...M <= 500) que significan el número de renglones y de columnas del campo. Cada una de las siguientes N líneas contiene exactamente M caracteres. El campo de 4 por 4 de la izquierda contiene dos minas.. ambos sin las comillas.es) ¿Has jugado alguna vez al Buscaminas? Este es un jueguito que viene con un cierto sistema operativo cuyo nombre no puedo recordar. . Debe haber una línea en blanco entre las salidas de cada campo." reemplazados por el número de minas adyacentes a ese cuadro... terminamos con el campo de la derecha: *.*. Si representamos el mismo campo usando las pistas descritas arriba. respectivamente. Salida *100 2210 Página 8 de 70 . Cada cuadro tiene a lo mucho ocho cuadros adyacentes. *100 2210 1*10 1110 Descripcion de la entrada: La primera línea contendrá dos enteros N y M (0 < N..Buscaminas (acm..Examenes de Preselección para la IOI 2006 Problemas y Soluciones.. .. 1.uva.. Ejemplo: Entrada 44 *. ... . El juego muestra un número en un cuadro que te dice cuántas minas hay adyacentes a ese cuadro.. Los cuadros seguros se denotan con un ".*.. Descripcion de la salida: Tu programa deberá escribir Las N líneas que deben contener el campo con los caracteres "... . El objetivo del juego es el de encontrar dónde están localizadas todas las minas en un campo de M por N. representando el campo.." y los cuadros con minas con un "*".

En la segunda línea habrá N enteros positivos separados por un espacio.3. {5} entonces una forma posible de reunirlos en un sólo grupo es: {6}. 1*10 1110 Condiciones de ejecución. {6}. Existe una única operación permitida con los grupos: se pueden unir dos grupos siempre y cuando su unión también sea un grupo.1}.1.2.1. {6}.5} no lo son.2. 1. de modo que los números en la línea I son el más pequeño y el más grande del grupo creado en la operación I.Agrupando Números (Croatian Olympiad in Informatics) Descripción del problema: Los números del 1 al N están escritos en un pizarrón en algún orden arbitrario (de izquierda a derecha). si los números en el pizarrón fueran {6}.1}. {4}.5}. Al principio supondremos que cada uno de los números en el pizarrón forma un grupo por sí mismo. {6}. {4.2. Cada una de estas líneas contiene dos enteros A y B.7. {3.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Por ejemplo.6.2} y {2. los conjuntos {2}. {4}. Descripcion de la entrada: En la primera línea habrá un entero N con 1 <= N <= 250000.2. Estos son los números en el orden en el que están escritos en el pizarrón. {4.4} son grupos.. {1}. {5}. {6.5}.5}. {2. {3.   Escribe un programa que determine una sucesión de N-1 operaciones de modo que al final todos los números en el pizarrón formen un grupo.5.4. {5}. pero {5. {3. Entrada 6 632145 13 45 Página 9 de 70 . {3}. {3}. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo.1}. Por ejemplo. Descripcion de la salida: La salida consiste de N-1 líneas. {2}.5} y {3.4. Un grupo es un conjunto de enteros que forma un intervalo.4.5. {4}.

Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo. 15 16 Salida 12 Condiciones de ejecución. Página 10 de 70 .

7..Comesolo Página 11 de 70 .1. 2..Sudoku 2.Burocracia Interminable 2..Hotel Gobernador 2.3.10.9.Otra vez sumas 2.4.....5.6..Perro 2.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.2.Tiempo Malgastado 2.8.Terremoto 2.Sokoban 2...El Coro de la Iglesia 2.-Problemas de Búsquedas 2.

llevar proviciones etc). Página 12 de 70 . La letra 'P' seguida por un espacio y luego el entero c que representa la esquina a la cual el encargado quiere saber si puede ir. Conforme los rescatistas vayan removiendo escombro de las calles.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Las siguientes líneas contienen desbloqueos de calles y preguntas del encargado de llevar provisiones. por ello es necesario abrirse camino a traves del escombro. todas las calles quedaron bloqueadas por escombro y hay que atender a las víctimas(darle atención medica a algunos enfermos. Problema Debes hacer un programa que: ● Lea desde la entrada estandar los desbloqueos de las calles y las preguntas del encargado en orden cronológico. afortunadamente no hubo bajas. llegar a alguna esquina específica. al encargado le interesa saber si puede o no.1. Cada línea contiene alguna de las siguientes opciones: Desbloqueo. Termine la ejecución del programa al finalizar la entrada. (Nótese que cada calle se puede recorrer en ambas direcciones) Pregunta. La letra 'D' seguida de un espacio y luego los enteros a y b separados por un espacio.. ● ● Entrada La primera linea contiene un entero positivo: el número n de esquinas en la ciudad. 2.Terremoto La Ciudad QuienSabeDónde ha sufrido de un terrible terremoto. El encargado de llevar provisiones se encuentrá inicialmente en la esquina 1 y no puede ir a ninguna otra esquina ya que todas las calles están bloqueadas por escombro. Para cada pregunta del encargado responda(en salida estandar) afirmativa o negativamente dependiendo de si se puede o no ir desde la esquina 1 hasta la esquina correspondiente tomando en cuenta solo las calles que ya se despejaron anteriormente. que representan las esquinas de la calle en la cual acaban de quitar escombro. sin embargo. Los rescatistas han hecho un minucioso plan del orden en que irán removiendo el escombro de las calles.

La letra 'F' indicando el final de los datos de entrada. Indicador Final. Página 13 de 70 . nunca habrá mas de 4 calles que conduzcan a una misma esquina y además. en el 80% de los casos n<=50. Salida La i-ésima línea de la salida debe contener un entero: 1 si la respuesta a la i-ésima pregunta es afirmación y un 0 si la respuesta a la i-ésima pregunta es negación.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Ejemplo Entrada 5 P3 D24 D21 P4 P5 F Salida 0 1 0 Límites Puedes asumir que 1<=n<=10 000.

. hasta obtener unos nuevos sumandos mas pequeños. argumenta que para 22+35=75 la “prueba de la suma” dice que la operación se realizó correctamente 2+2=4. como 4+8=12 la suma está bien. debido a que la “prueba de la suma” lo que hace es sumar varios números y verificar su resultado. pero para impresionar mas ha pedido de tu ayuda. 7+5=12.-. Se trata de sumar los digitos de cada uno de los sumandos. Un profesor de matematicas quiere probar que la prueba de la suma no prueba nada(valga tanta redundancia)..Y Otra Vez Sumas Seguramente ya has oido acerca de la “prueba de la suma” que enseñan en la primaria para “comprobar” si una suma está correcta o no. quiere saber de cuantas formas se puede expresar un número n como suma de 1 o mas números enteros positivos. y luego de ello sumar los números resultantes. 2+1+2 y 2+2+1 se deben de contar como si fueran una misma forma de expresar 5 como suma de 1 o mas enteros positivos.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 3+5=8. 2. es decir. Por ejemplo. entonces.2. 4+8=12. de la misma forma que lo hace con el resultado 5+7=12. el 5 se puede expresar de 7 formas como suma de 1 o mas números enteros positivos: 1+1+1+1+1 1+1+1+2 1+1+3 1+2+2 1+4 2+3 5 Nótese que varias permutaciones de los mismos números se consideran una única forma. 1+2+2. Problema Debes hacer un programa que: ● Lea desde entrada estandar un número n. Por ejemplo 22+35=57 la “prueba de la suma” suma los digitos de cada uno de los sumandos por separado de esta forma: 2+2=4 y 3+5=8. Página 14 de 70 .

● ● Cuente las formas para expresar ese número como suma de 1 o más enteros positivos. Página 15 de 70 . Escriba el resultado en salida estandar. Ejemplo Entrada 5 Salida 7 Límites Puedes asumir que para todos los casos n<=300 y además en el 80% de los casos n<=60. Salida Una única linea con un número entero: el número de formas de expresar n como suma de 1 o mas enteros positivos. ● Entrada Una única línea con un número entero: el número n.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

Problema Debes hacer un programa que: ● Lea de entrada estandar el acomodo actual de Fulano D. . 2. n. se ha dado cuenta que tarda un minuto en acomodar los números en un nuevo órden.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Fulana D. n-1. luego el resto de los números se acomodan de manera que el segundo número de la secuencia sea lo mas pequeño posible. Tal a hacer ver a su esposo exactamente cuánto tiempo lleva reacomodando números. Luego decide que ese acomodo no le gusta. asi que opta por reacomodarlo en 1.. Tal no se ha percatado de que todo el tiempo que lleva tratando de acomodar los números. Ayuda a Fulana D. . .. que representa el tamaño de la secuencia de Página 16 de 70 . y asi. Tal llegar a ese acomodo ● Escriba la respuesta en salida estandar Entrada En la primera línea se encontrará un entero positivo: el número n. 3. 4312 4321 Luego de un rato Fulano D.-Tiempo Malgastado Fulano D. Tal iría eligiendo conforme se decide: 1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 . Tal. Tal ● Calcule cuántos minutos le tomó a Fulano D. . Despues de mirar un rato nuevamente el acomodo de los números vuelve a concluir que no le gusta el nuevo acomodo. 3. n. su esposa.. asi que opta primero por poner los números en orden ascendente. osea 1. Todo esto siempre y cuando el orden al que se llegó no se haya elegido anteriormente.. y asi sucesivamente hasta el n-esimo número.3. va cambiando el órden de los números de la siguiente manera: Acomoda los números en el orden en el cual el primer número de la secuencia sea lo mas pequeño posible.. Para n=4 estos serian los acomodos que Fulano D. Tal tiene n números que quiere acomodar pero se muestra indeciso en cuanto al orden. 2.. 2.

Tal. Tal buscando la manera de acomodar los números. en el 80% de los casos n<=10. en la segunda línea habrá n números que representan el acomodo actual al que ha llegado Fulano D. números que lleva un rato reacomodando Fulano D. Tal nunca habrá perdido mas de 1152921504606846976 minutos. Ejemplo Entrada 4 2314 Salida 9 Límites Puedes asumir que Fulano D. Tal Salida Tu programa deberá escribir un unico entero en una sola línea: el número de minutos que lleva Fulano D.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Página 17 de 70 . además.

Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

2.4.-Sudoku
El sudoku es un juego de habilidad. Consiste en partir de una cuadrícula de nueve cuadros por nueve, que dan un resultado de ochenta y un espacios. Este puzzle está dividido a su vez en regiones (que vienen marcadas como cuadrículas en negrita) que constan de nueve celdas; cada una de estas regiones está formada por tres filas de tres celdas. En algunas de ellas se colocan los números del uno al nueve (y que reciben el número de "determinados"); para completar el juego, cada jugador debe rellenar los números que faltan, de modo que cada fila, cada columna y cada región contengan los números del uno al nueve sin que se repitan. Una cuadricula de Sudoku antes de iniciar el juego suele verse algo asi:

Problema
Debes hacer un programa que:
● Lea los determinados de una cuadricula de Sudoku desde entrada estandar. ● Rellene los espacios vacíos con dígitos del 1 al 9 de manera que cada fila, cada columna y cada región

contenga los números del 1 al 9 sin que se repitan.
● Escriba la cuadricula resultante en salida estandar.

Entrada
La entrada constará de 9 líneas, cada una de ellas con 9 enteros separados por espacios. El j-esimo número de la i-esima línea representara el j-ésimo número de la i-ésima fila de la cuadricula inicial(el 0 representará casilla vacía inicialmente, y cualquier otro número(siempre positivo y menor a 10) representará un determinante).

Salida
Página 18 de 70

Examenes de Preselección para la IOI 2006 Problemas y Soluciones.
Deberá haber 9 líneas y cada una de ellas con 9 enteros separados por espacios. El j-esimo número de la iesima línea deberá representar el j-ésimo número de la i-ésima fila de la cuadricula con la solución.

Ejemplo
Entrada
003900760 040006009 607010004 200670090 004305600 010049007 700090201 300200040 029008500

Salida
153984762 842736159 697512834 238671495 974325618 516849327 765493281 381257946 429168573

Límites
Puedes asumir que cada caso tendrá una y solo una solución posible.

Página 19 de 70

Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

2.5.-Burocracia Interminable

Estas a punto de hacer un tramite en oficinas de gobierno, y para ello tienes que ir con una persona a la cual llamaste la persona 1. Es de esperarse que esa persona no te atienda directamente sino que te mande con otra, y a su vez esa con otra y asi sucesivamente. Dependiendo del asunto, cada persona te puede mandar con otras, y tus tramites se realizarán cuando alguna de ellas se digne a atenderte. Sin embago los trabajadores de las oficinas no estan conscientes de que puede haber tramites interminables, un tramite interminable es aquel en el cual vas a pedir informes con la persona 1, ella te manda con otra persona que a su vez te puede mandar con cualquier otra y al final de todo, alguien te vuelve a mandar con la persona 1. Hay n personas trabajando en las oficinas numeradas del 1 a la n, debes hacer un programa que encuentre el tramite interminable mas “corto”, es decir, aquel en el que hables por segunda vez con la persona 1 hablando con el menor número de personas posibles.

Problema
Debes hacer un programa que:

Lea el número de personas que trabajan en las oficinas y quién te puede mandar con quién desde entrada estandar. Calcule el tamaño del tramite interminable mas corto. Escriba la respuesta en salida estandar.

● ●

Entrada
La primera línea contendrá 2 enteros: n y m. Cada una de las siguientes m lineas contendrán 2 enteros a y b, que representan “la persona a te puede mandar con la persona b”.

Salida
La primera y unica línea deberá contener un único entero: el tamaño del trámite interminable mas corto.El tamaño del trámite interminable mas corto es el número de personas con las Página 20 de 70

en el 80% de los casos n<=20 y m<=80 Página 21 de 70 . cuales tienes que hablar para que te vuelvan a mandar con la persona 1(incluyendo a la persona 1). además. Ejemplo Entrada 45 12 23 31 24 43 Salida 3 Límites Puedes asumir que siempre 1<=n<=100.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

El hotel está dividido en m x n modulos cuadrados. Calcule el tamaño del cuarto mas grande.6. Encuentré qué pared quitar para formar un nuevo cuarto lo mas grande posible.c. Cada modulo puede tener entre 0 y 4 paredes. hotel. Problema Debes hacer un programa que: ● ● ● ● ● Lea el mapa de un hotel desde la entrada estanda.)). 2.Hotel Gobernador (IOI) (hotel. Entrada Página 22 de 70 .cpp) 1 2 3 4 1 2 3 4 5 6 7 ############################# # | # | # | | # #####---#####---#---#####---# # # | # # # # # #---#####---#####---#####---# # | | # # # # # #---#########---#####---#---# # -># | | | | # # ############################# # = Pared | = No pared . hotel.pas.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Calcule cuantos cuartos tiene.= No pared -> = Esto muestra donde quitar la pared de acuerdo al caso de ejemplo. La figura muestra el mapa del Hotel Gobernador(Quizá en la realidad no es así pero en este problema es como la entrada lo diga . Escriba el resultado en salida estandar..

Que representan el número de filas y columnas en el mapa del hotel respectivamente. ● Ejemplo Entrada 4 7 11 6 11 6 3 10 6 7 9 6 13 5 15 5 1 10 12 7 13 7 5 13 11 10 8 10 12 13 Salida 5 9 41E Página 23 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 1) estará tambien indicada como una pared en el norte del modulo (2. c puede ser 'N'. Las paredes interiores serán definidas tambien. Salida Tu programa deberá escribir en salida estandar 3 líneas: ● ● La primera línea deberá contender un entero que representa el número de cuartos. b y un caracter c separados por espacios. 8=pared al sur. El mapa estara representado en forma de números. sur. 2=pared al norte. 'E' u 'O' que representan norte. 0<=p<=15. este y oeste respectivamente. a representa la fila donde se encuentra la pared que hay que derribar para conseguir el cuarto mas grande posible. b representa la columna de un modulo adjacente con tal pared. Este número es la suma de: 1=pared al oeste. 1). 4=pared al este. una pared en el sur del módulo (1. En las siguientes n lineas los módulos de cada fila serán descritos por m números enteros p. c representa el lado del módulo en el que se encuentra la pared. La segunda línea deberá contener un entero: el área del cuarto mas grande(contada con módulos) La tercera línea deberá contener 2 enteros a. uno por cada módulo ● ● La primera línea contendrá 2 enteros: n y m. 'S'.

n<=10. m<=50. Además. Límites Puedes asumir que 1<=n.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. en el 60% de los casos m. El hotel siempre tendrá a lo menos 2 cuartos. Página 24 de 70 .

Salida Deberá ser una sola línea con n enteros. Si hay varias soluciones cualquiera será aceptada. Página 25 de 70 .El Coro de la Iglesia (coro. la suma de todas las intensidades de las personas que estan a la derecha da como resultado la intensidad derecha. llaman la atención los de la derecha.c. entonces llaman mucho la atención los de la izquierda.7. coro. el número de coristas.cpp) En una Iglesia hay n personas en el coro numeradas del 1 a la n y hay 2 lugares disponibles para el coro. y la suma de las intensidades de las personas que estan a la izquierda dan como resultado la intensidad izquierda. Escriba los grupos resultantes en salida estandar.. Problema Debes hacer un programa que: ● ● Lea los datos del grupo de coristas desde entrada estandar. ● Entrada La primera línea contendrá un solo entero n. Cada cantante tiene una intensidad que puede ir desde 1 hasta 100.pas.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. si los de la derecha cantan mas fuerte. el objetivo es que canten con la misma intensidad ambas partes del coro para que toda la atención esté al frente. coro. el i-esimo entero deberá ser 0 si el corista número i está a la izquierda y 1 si el corista número i está a la derecha. uno a la izquierda y otro a la derecha. 2. si las voces de la izquierda se oyen mas fuerte que los de la derecha. Encuentre de qué manera dividirlos en dos grupos para que la sumatoria de las intensidades de cada grupo sean iguales. La segunda línea contendrá n enteros. el i-esimo entero representará la intensidad con la que canta el corista número i.

en el 70% de los casos n<=10.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Se garantiza que siempre habrá una forma posible de acomodar a los coristas con las condiciones antes mencionadas. Página 26 de 70 . Ejemplo Entrada 6 10 5 5 2 4 2 Salida 100010 Límites Puedes asumir que siempre n<=30 y además.

El pueblo tiene n esquinas. Miranda. una vez recibida la información sobre dónde se encuentran decide elegir un camino para llegar a la iglesia de tal forma que jamas se encuentre con Greg o con Stef.Y las calles se representan como las aristas de este grafo.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. incluyendo el Domingo por la mañana cuando ella va a la Iglesia. Como a Miranda no le cae bien ninguno de los dos.cpp) Greg y Stef estan ambos perdidamente enamorados de su compañera de clase. la iglesia a las que le gusta ir los domingos y los bares a los que a Greg y Stef les gusta ir a tomar cerveza. Escriba el resultado en salida estandar. las esquinas estan numeradas del 1 a la n y las calles se pueden recorrer en ambos sentidos. 2. pero Greg y Stef tienen carro. pero Miranda. Paradógicamente Miranda va a pié. Así que se sienten irresistiblemente ansiosos de estar lo más cerca de ella posible todo el tiempo. la casa de Miranda.pas. Página 27 de 70 ● . El pueblo donde ellos viven tiene discriminación.Perro (Inspirado en Nevenka Croatian Olympiad in Informatics 2004) (perro. Ayude a Miranda a encontrar el camino mas corto para llegar a alguna iglesia en el cual Miranda pueda estar segura que no se encontrará con Greg o con Stef. Miranda conoce a todas las meseras que atienden los bares del pueblo y les ha preguntado por telefono. ellos fueron a dos diferentes bares cada uno. para saber en qué bares se encuentran Greg y Stef. Las esquinas de la ciudad.8. Un cierto domingo. Problema Escribe un programa que: ● ● Lea la configuración del pueblo desde entrada estandar. como toda aristócrata si puede pasar por ahí. perro. se representan como vértices del grafo. El pueblo donde ellos viven puede ser representado por un Grafo Conexo no direccionado. asi que el tiempo en que cada uno de ellos se tarda en ir de una esquina a otra es insignificante.. perro.c. por ello hay algunas calles por las que no pueden pasar Greg y Stef porque solo puede pasar la aristocracia.

c y d. Salida La primera línea deberá contener un único entero: la longitud del camino mas corto que debe recorrer Miranda. donde x e y son las esquinas que conecta la calle y c qué clase de calle es. x. Si z=1 Greg y Stef pueden pasar por ahí. La segunda linea contendrá 4 enteros a. Ejemplo Entrada 78 1743 120 321 241 270 540 761 651 151 Salida 3 Página 28 de 70 . b representa la esquina donde se encuentra la iglesia que a Miranda le gusta visitar. Entrada En la primera linea se encontrán 2 números enteros n y m. Si no existe tal camino tu programa deberá de escribir -1. cada línea contendrá 3 enteros. Las siguientes m líneas describirán cada una de las calles. Donde a representa la esquina donde se encuentra la casa de Miranda. de lo contrario solamente Miranda puede recorrer la calle. y y z.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. c representa la esquina donde se encuentra el bar al que fué Greg y d representa la esquina donde se encuentra el bar al que fué Stef. que son el número de esquinas y calles de la ciudad respectivamente. b.

Límites Puedes asumir que 4<=n<=300 y además.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. en el 70% de los casos n<=50 y m<=200. Página 29 de 70 .

cpp. Encuentre una secuencia de movimientos lo mas corta posible para que el obrero empuje la caja hasta la ubicación dada. este u oeste. Solo puede empujarla y no tiene suficientes fuerzas para tirar de ella. 2. El cuarto está representado por una cuadricula de 5 x 5 rodeada de una pared perimetral. ● Página 30 de 70 .-Sokoban (CIIC) (sokoban. Escriba el resultado en salida estandar. se trata de que el obrero empuje los rubies que se muestran en la figura para ponerlos sobre los circulos verdes. sur. el obrero puede moverse una casilla al norte. Cuando en un movimiento no empuja la caja. sokoban.pas. cajas sobre marcas en el suelo. o en muchas versiones. Por si no fuera asi. sokoban.c) Seguramente ya conoces el clasico juego de Sokoban. Considera un juego de sokoban en el cual el obrero debe empujar una caja a traves de un cuarto hacia una ubicación determinada.9. De igual manera. siempre y cuando no pase a una casilla que este ocupada por una pared (Nótese que el obrero tampoco se puede mover en diagonal). pasando el obrero a ocupar la casilla que antes ocupaba la caja y ésta la casilla vecina a la que ocupaba originalmente. El acto de empujar la caja se ejerce cuando el obrero estando en una casilla adyacente a la caja la empuja.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. El obrero sólo puede empujar la caja desde una casilla vecina horizontal o verticalmente. el obrero solo puede empujar la caja si la caja pasa a ocupar un lugar en el cual no se encuentra una pared. NUNCA en diagonal. Problema Debes hacer un programa que: ● ● Lea el mapa de el cuarto desde entrada estandar.

el caracter C la ubicación de la caja. columna j del mapa del cuarto. que indican los movimientos del obrero desde el inicio hasta que coloca la caja en el lugar de destino..X XXXXXXX Salida 11 OSONNNONEEE Página 31 de 70 . cada una de 7 caracteres dando el mapa del laberinto..Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Nótese que en cada movimiento el obrero solo se mueve una casilla. y el caracter D el lugar de destino de la caja.. el caracter O(O.. Los pasillos por donde el obrero y la caja pueden transitar se representan por un punto (caracter ASCII 46).. que representan un movimiento al norte. Dichos caracteres pueden ser N. un movimiento al sur. siendo n el tamaño de la secuencia de pasos para colocar la caja en el lugar de destino... El j-ésimo caracter de la i-ésima línea representa el contenido de la casilla que se encuentra en la fila i..O.. E u O..X X.DX X.. Salida La primera linea deberá contener de un solo entero n. un movimiento al este y un movimiento al oeste respectivamente.C.X X.XXXX X. Ejemplo Entrada XXXXXXX X.. Entrada La entrada constará de 7 líneas. Los caracteres X indican paredes. no cero) indica la ubicación del obrero. S. La segunda línea deberá contener n caracteres separados por espacios.

Límites y Forma de Evaluar Se garantiza que todas las entradas tienen solución. La salida será evaluada de la siguiente forma: Si el obrero hace un movimiento invalido(mueve la caja a un lugar ocupado por una pared o intenta transpasar una pared) o no lleva la caja a su lugar de destino obtendrás 0 puntos en en ese caso de prueba unicamente.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. En total habrá 10 casos de prueba para este problema. obtendrás la parte entera de (a/n)*3 puntos en ese caso de prueba unicamente. si tu salida resuelve el caso de prueba. Sea a la longitud de la secuencia mas corta que resuelva el caso de prueba. Página 32 de 70 .

comesolo. Entrada La primera línea del archivo contiene un solo entero: el número n. comesolo. La ficha sobre la que se brincó se elimina del tablero.. elmine tantas fichas como pueda. Escribe un programa que dado el tamaño del tablero y la ubicación de cada una de las fichas. . es decir. sino es 0. Problema Este es un problema de solo salida. Tu trabajo es producir los archivos de salida comesolo1.. cada ficha puede tener hasta 8 fichas vecinas. . comesolo10. comesolo20.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Página 33 de 70 . comesolo2. El juego consiste en eliminar tantas fichas como sea posible del tablero ejecutando la siguiente operación: Una ficha puede brincar sobre una ficha vecina siempre y cuando su destino esté vacio. el j-éstimo entero de la i-ésima línea será 0 si la casilla que está en la i-ésima fila y la j-ésima columna no contiene ficha.tgz) Comesolo es un juego que se juega sobre un tablero de n x n en el cual puede haber fichas en cualquiera de las casillas.in.tar.out.. Las siguientes n líneas del archivo contienen n enteros separados por espacios.in.in.Deberás de mandar todos los archivos de salida que puedas producir en un archivo zip.zip.. entonces contendrá una ficha. Dos fichas son vecinas si las casilla que ocupen tienen algún vertice en común.out. . comesolo. esto significa que podras bajar los casos de prueba comesolo1.gz.tar. comesolo2.-Comesolo (comesolo. conteniendo todos los archivos de salida sin subdirectorios. o tar-gzip.10..out. Salida La primera línea de la salida debe contener el número m de fichas eliminadas. 2.

además. Ejemplo Entrada 3 000 011 000 Salida 1 2321 Pendiente Límites y Forma de Evaluar Para todos los casos n<=30. d cada una separados por espacios. donde a es la fila de la ficha que se mueve antes de realizar el movimiento. para el 70% de los casos n<=10. Puedes suponer que o es positivo en todos los casos de prueba. c es la fila de la ficha que se mueve despues de realizar el movimiento y d es la columna de la ficha que se mueve despues de realizar el movimiento. donde o es el máximo número de fichas que se sepa se pueden eliminar. b. c. Página 34 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. b es la columna de la ficha que se mueve antes de realizar el movimiento. Las siguientes M líneas deben contener cuatro enteros a. Para cada caso de prueba se otorgarán los puntos correspondientes a la parte entera de (3m)/o. Cada línea representa el movimiento de una ficha.

. 3..5..La Tecnica de la Indiferencia Página 35 de 70 .El Ladrón y la Mochila 3..3..4.Desconectando al Enemigo 3.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.K-Ceros 3..1.2.Problemas de Algoritmos Glotones o Divide y Venceras 3.Cuenta Burbujas 3.

La segunda línea contendrá m enteros separados por espacios.c. Las cámaras de seguridad se dieron aportaron el dato de que el ladrón llevaba una mochila con campacidad para k monedas y cuando salió tenía la mochila llena.1. Sin embargo debido a un incompetente reporte de inventario y a que solo hay una camara de seguridad nunca se supo cual fué el monto total del dinero robado.cpp. 3. Ejemplo Entrada Página 36 de 70 . La policía requiere de tu ayuda para saber cuál fué el monto maximo que pudo haber sido robado y tambien el monto mínimo. el donde el i-ésimo entero representará el costo de cada moneda de tipo i. ● Calcule los montos máximo y minimo que pudieron haber sido robados. Los tipos de monedas estan números del 1 a m. Problema Debes hacer un programa que: ● Lea los datos de las monedas y la mochila desde entrada estandar. mochila. Entrada La primera línea contendrá 2 enteros separados por un espacio: m y k. mochila.pas) Tiempo límite: 1 segundo Una noche un ladrón entró clandestinamente a una tienda de monedas para coleccionistas. ● Escriba el resultado en salida estandar. Salida La primera y única línea deberá contener 2 enteros separados por un espacio: el primero de ellos deberá representa el monto máximo que pudo haber sido robado y el segundo el monto mínimo.El Ladrón y la Mochila (mochila.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. El dueño de la tienda reportó tener m y tipos de monedas y mas de k monedas de cada tipo antes y después del robo..

además. 5 12 23487 Salida 96 Límites Puedes asumir que para todos los casos m<=10 000 y k<=1 000 000. en el 60% de los casos m<=100 y k<=1000. Página 37 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Se garantiza que el monto maximo nunca sera mayor a 1073741824.

K-Ceros (kceros. Por ejemplo: ● ● ● ● 5!=120. 5! tiene un cero a la derecha.2.. 13! tiene 2 ceros a la derecha Aquí se te pide una tarea un poco mas compleja: Problema Debes hacer un programa que: ● Lea un entero m desde entrada estandar ● Encuentre un entero k tal que k! tenga al menos m 0s a la derecha y (k-1)! tenga menos de m 0s a la derecha. 4! tiene 0 ceros a la derecha. ● Escriba el resultado en salida estandar Entrada La primera y única linea contendrá un solo entero.c. 4!=24.pas) Tiempo límite: 1 segundo Considérse la función factorial donde: factorial(0)=1 factorial(x)=factorial(x-1)*x factorial(x) se denota como x! Calcular el número de ceros que tiene a la derecha n! es facil. el número m.cpp. 15!=1307674368000.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Salida Página 38 de 70 . 15! tiene 3 ceros a la derecha 13!=6227020800. kceros. 3. kceros.

el número k. Página 39 de 70 . en el 60% de los casos m<=200 000. además. La primer y única línea deberá contener un solo entero. Ejemplo Entrada 1 Salida 5 Límites Puedes asumir que en todos los casos 0<= m <= 20 000 000 000.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

Considera el algoritmo de Burbuja para una secuencia s de n elementos: Repetir n veces inicio para i:=1 hasta n-1 inicio si s(i)>s(i+1) inicio intercambia(i. ● Escriba el resultado en salida estandar Entrada La primera línea contendrá un entero n que representa el tamaño de la secuencia. fin..Examenes de Preselección para la IOI 2006 Problemas y Soluciones. i+1).c. Problema Debes hacer un programa que: ● Lea una secuencia de números desde entrada estandar. La segunda línea contendrá una secuencia s de n enteros separados por espacios. burbuja. ● Calcule cuántas veces se llama la función “intercambia” para la secuencia dada con el algoritmo de burbuja. Salida La primera y única línea debera contener un solo entero: el número de intercambios que el Página 40 de 70 .3. fin. fin.cpp. 3.pas) Tiempo límite: 1 segundo Un algoritmo de ordenamiento muy popular entre los principiantes es Burbuja.Cuenta Burbujas (CEOI) (burbuja. burbuja.

Ejemplo Entrada 5 23 99 42 25 50 Salida 4 Límites Para todos los casos n<=50000 y además.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. en el 60% de los casos n<=1000 Página 41 de 70 . algoritmo de burbuja realiza.

que representan una línea de comunicación entre los puntos a y b. es decir. esta red tiene n puntos de comunicación numerados de 1 a n y n-1 líneas de comunicación.(se garantiza que siempre será asi) La policía forzosamente tiene que ir arrestando poco a poco a los integrantes de dicha red (ya que está muy dispersa).Examenes de Preselección para la IOI 2006 Problemas y Soluciones.. Problema Debes hacer un programa que: ● Lea de entrada estandar la configuración de las comunicaciones de la red de crimen organizado. el primero conectado con el remitente y el último conectado con el destinatario. ● Encuentre el menor número de puntos de comunicación que se necesitan neutralizar para que no haya par de puntos comunicados.(a se puede comunicar con b y viceversa) Salida Una línea con un único número entero: el minimo de puntos que se necesitan neutralizar. desconectando. Cada línea de comunicación une a exactamente 2 puntos de comunicación. Cada una de las siguientes n-1 líneas contendrá 2 enteros a y b.pas) Tiempo límite: 2 segundos La policía pretende desmantelar una red de crimen organizado. ● Escriba el resultado en salida estandar Entrada La primera línea contendrá un unico entero: el número n. de esa manera el mensaje puede llegar de cualquier punto de comunicación a cualquier otro.Desconectando al Enemigo (desconectando. Para pasarse mensajes entre 2 puntos de comunicación que no estan conectados siempre tienen intermediarios. para evitar que huyan ha diseñado una estrategia basada en mandar espías para que dejen inservibles ciertos puntos de comunicación.c.4. uno o mas puntos de comunicación conectados uno tras otro. Ya que esto es una tarea peligrosa y agotadora la policía quiere saber cuál es el mínimo de puntos de comunicación que tiene que neutralizar(dejar inservible) para que ningun par de puntos de comunicación se puedan mandar mensajes entre si. 3. desconectando. Página 42 de 70 .cpp.

además en el 50% de los casos n<=50. Página 43 de 70 . Límites Puedes asumir que n<=100 000.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Ejemplo Entrada 7 12 13 24 52 63 37 Salida 2 Nota de la salida: Los puntos que se eliminan en este caso son el 2 y el 3.

En una olimpiada de informatica de cuyo nombre no quiero acordarme hubo una degación de 4 competidores(como todas :P) y cada uno de ellos tenía el gran don de causar la atracción a las guías por medio de la indiferencia. la guía se va por el que tiene mayor grado de indiferencia.. Página 44 de 70 . C por su parte se situó en una casilla de la ultima fila y D se situó en una casilla de la ultima columna. d). 1).La Tecnica de la Indiferencia (indiferencia. Un competidor. c y d. 3. 2n) y D se situó en la casilla (3n. B en la casilla (1. m) se define como |x-m|+|y-n|. B es mas indiferente que C. La distancia entre dos casillas de la cuadricula (y. otro se llamaba C y un ultimo se llamaba D. aquel competidor que tenía mas lejos y que por lo tanto le manda mas indiferencia a ella. a. En ese momento los poderes de la tecnica de la indiferencia actuaron y cada guía quedó llena de ganas de conocer a uno(y solo uno) de los 4 competidores.cpp.c. y cualquier parecido con nombres o situaciones reales es pura coincidencia.pas) Tiempo límite: 2 segundos. B decidió colocarse en una casilla sobre la primera columna. Es decir A se situó en la casilla (a.5. b. indiferencia. NOTA: Los nombres y situaciones descritos en este problema son mera ficción. indiferencia. A es mas indiferente que B. una guía en cada casilla de la cuadricula. y C es mas indiferente que D.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. C en la casilla (c. b). ● Determine el número de guías que se fueron con cada competidor. Mientras las guías estaban paradas sobre la cuadricula A decidió colocarse en una casilla de la cuadricula sobre la primera fila. siendo indiferentes hacia las guías podían llamar su atención ya que la indiferencia los hacía parecer omnipotentes y a la vez misteriosos y sabios. ello quiere decir que si dos competidores estan igualmente lejos de una guía. x) y (n. Problema Debes hacer un programa que: ● Lea los datos de las posiciones de los competidores asi como el tamaño de la cuadricula. Cierto día a las 6n² guías se les ocurrió pararse sobre una cuadricula de 2n filas x 3n columnas. ● Escriba el resultado en salida estandar. que se llamaba A(¿qué buen nombre verdad?) otro se llamaba B. Tu quieres determinar cuántas guías se fueron con cada quién sabiendo n. Es decir.

Salida Una sola línea con 4 números enteros representando cuántas guías se fueron con A. Ejemplo Entrada 39554 Salida 25 21 0 8 Límites Puedes asumir que para todos los casos n<=1 000 000. además. a. en el 50% de los casos n<=5 000.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. y cuántas con D respectivamente. cuántas con C. c y d. b. Página 45 de 70 . cuántas con B. Entrada Una sola línea con 5 números enteros separados por espacios: n.

Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Soluciones Página 46 de 70 .

a cualquier nodo que se pueda llegar partiendo de X si solo se recorren aristas que conducen a niveles superiores. luego la rama derecha y finalmente el nodo actual. Simplemente se conocen 2 recorridos: Orden y Postorden.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Los dos recorridos funcionan de manera recursiva. los dos nos revelan el árbol si eliminamos posibilidades.. El recorrido en postorden visita primero la rama izquierda.Árboles Modelo a utilizar Sabemos que existe un árbol binario. pero en conjunto. A y B. pero en ordenes diferentes. Página 47 de 70 .1.Soluciones a los Problemas de Estructuras de Datos 1. mas no sabemos el árbol. si A aparece antes que B en orden. Uno solo de los recorridos no dice mucho. Observaciones Consideremos dos nodos cualesquiera. entiendase como padre de un nodo X. Si A aparece antes que B en postorden. luego visita el nodo actual y finalmente la rama derecha. 1. Dados los recorridos en orden y postorden deseamos conocer el árbol o conocer el recorrido en preorden. El siguiente árbol muestra las deducciones que se pueden hacer conforme a los dos recorridos: En este caso. el recorriedo en orden visita la rama izquierda.. significa que A está a la izquierda o es padre de B. significa que A es hijo de B o A está a la izquierda de B.

Asi que solamente hay que saber donde insertarlo. Otra observación que vale la pena hacer notar es que el último nodo del recorrido en postorden es la raíz del arbol. Página 48 de 70 . nuevo_valor). cada nodo que se inserta se sabe que es hijo de alguno de los nodos ya insertados(debido a que no es padre de ninguno de ellos). De esa forma. nuevo_valor). En seguida se insertan secuencialmente los nodos del recorrido en postorden empezando con los ultimos y terminando con los primeros. Solución 1 – Construyendo el Árbol Primeramente se inserta como raíz el ultimo nodo del recorrido en postorden. sino si precede_en_orden(nodo a nuevo_valor) Insertar(nodo->hijo_izquierdo. nuevo_valor) si no_existe(nodo) asignar_valor(de nuevo_valor a nodo). esto se pueda hacer de manera recursiva: 1 2 3 4 5 6 7 8 Función Insertar(nodo. sino Insertar(nodo->hijo_derecho.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Una vez construido el árbol ya no es problema alguno hacer el recorrido en preorden.

y a cada casilla que se encuentre al lado de una casilla con el valor de 1 y se pueda pasar por ahí se le asigna el valor de 2. y al Página 49 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. se recorre el arreglo y a toda casilla que se encuentre al lado de una casilla con valor de 0 y represente un lugar donde se pueda pasar se le asigna el valor de 1. sabemos que no es posible probar todos los caminos. Esta solución es O(NlogN) y funciona para el 100% de los casos. Esta solución es O(MNT) Solución 2 – Busqueda en Amplitud Al igual que en la solución 1 se debe de tener un arreglo que indique los caminos mas cortos encontrados. Observaciones Para conocer el camino mas corto para llegar al destino. Se vuelve a recorrer el arreglo. determinar el menor número de cuadros que contiene el camino mas corto entre 2 puntos dados. entonces ese valor será el camino mas corto. Solución 1 . Luego. En la cola inicialmente se mete la posición de partida y se marca la posición de partida como 0.Laberinto Estructura de la solución Dada una cuadricula que representa un mapa donde cada casilla puede ser un lugar donde esta permitido pasar o donde esta prohibido pasar. A la casilla que representa al punto de partida se le asigna el valor de 0 y a todas las demas el valor de infinito. se debe de tener una cola. Y así sucesivamente hasta que se le asigne el valor a la casilla de destino ó ya no pueda haber un camino menor o igual a T. hay que conocer todos los puntos a los que se puede llegar con caminos mas cortos que este.. pero además. Luego se entra en un ciclo en el cual se saca un nodo de la cola. 1. por ello. Definición del Modelo y el Espacio de Búsqueda La cantidad de caminos entre dos puntos dados es exponencial. Solo es necesario saber la longitud del camino mas corto. se comprueba si es el nodo de destino.2. si no lo es marca las casillas vecinas que no esten marcadas y representen suelo donde se pueda pasar con el camino mas corto para llegar a la casilla actual + 1. Todos los lugares a los cuales se puede llegar con x movimientos estan al lado de por lo menos un lugar al que se puede llegar con x-1 movimientos.“Punto en expansión” Primero que nada se debe de tener un arreglo con los caminos que se han encontrado para llegar a cada punto.

Se repite el proceso anterior hasta que se saque de la cola la posición final. y queremos saber cual tiene mas incidencia.3. Asi que para sustituir eso es posible usar un árbol binario de búsqueda. ya que si se insertan muchos nodos en una misma rama se corre el riesgo de que el tiempo de ejecución se haga casi lineal en cada inserción.. El problema con este algoritmo es que cada inserción requiere de logN comparaciones de cadenas de caracteres. y es O(N²) en el Página 50 de 70 . Asi que tenemos un total de 26^6+26^5+26^4+23^3+26^2+26=321272406 nombres posibles. Pero hacer 26²=676 árboles ya es un poco mas razonable. Otro inconveniente es el de equilibrar los árboles.Elecciones Definición del Espacio de Búsqueda Tenemos a lo mas 500 000 cadenas de 6 caracteres. un árbol para nombres que empiezen con cada pareja de letras del abecedario. Esta solución es O(NlogN) en caso promedio con un bucle interno grande. 26^1 nombres de un caracter. Puede haber 26^6 nombres de 6 caracteres. y si es posible.. Solución 1 – Árbol binario de Búsqueda Es obvio que por cuestiones de memoria no se puede tener un arreglo con todos los nombres posibles e incrementar el que vaya apareciendo. 26^5 nombres de 5 caracteres. es decir.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Pero de cualquier manera si todas las palabras empiezan con las mismas primeras 2 letras no serviría de nada la tabla de disperción.. Este algoritmo es O(NM). tener un árbol para nombres que empiezen con cada letra del abecedario. 1. sin embargo equilibrar árboles es una tarea muy costosa de implementar y tambien toma un poco de tiempo de ejecución. con mayusculas y sin espacios. el cual en árboles desequilibrados se compensa pero en árboles que ya estan equilibrados simplemente es un gasto de tiempo de ejecución innecesario al estar comprobando si está equilibrado.. Una solución para esto es equilibrar el árbol. No es posible hacer un árbol completo con todos los nombres por razones ya explicadas anteriormente. y una comparación entre 2 cadenas de 6 caracteres requiere en el caso medio 3 comparaciones de un byte. El problema del desequilibrio puede apaciguarse con tablas de disperción. mismo tiempo estas casillas se meten a la cola.

De esa forma cada nombre se puede expresar con un número del 0 al 27^6=387420489. Ya que se tiene la secuencia de números. Solución 2 – Ordenamiento Para evitar hacer varias comparaciones de un byte es posible convertir cada letra en un número. contar las minas adjacentes a tal casilla 1. forzosamente se tiene que fucionar con el grupo que contenga a la x-1. lo cual se hace en O(1). Esta solución es de O(NlogN) en todos los casos. El resto solamente es decodificar el número para obtener la palabra. basta con ordenarla con algun algoritmo de ordenamiento de O(NlogN) y buscar el número que tiene la mayor cantidad de números iguales a él(esto se pueda hacer en O(N)).5 Grupos Es posible resolver este problema recorriendo un número indefinido de veces la lista de números e irlos agrupando siempre que se pueda. y si su número Página 51 de 70 . Solución 2 Recorrer el arreglo de entrada y cada que se encuentre una casilla sin mina.4.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Nótese que dos grupos se pueden agrupar en uno mayor si y solo si el número mayor de uno de los grupos es igual al número menor de otro -1. esto se puede lograr si tomamos la palabra como un número de 6 dígitos en base 27. ya que a lo mas se pueden usar 26 caracteres y puede ser cómo usar un caracter adicional para indicar el final de la cadena. para x diferente de 1.. Luego simplemente hay que cambiar el número de base heptavigecimal a base decimal. recorrer el arreglo de entrada y al encontrar una mina incrementar las casillas vecinas en el arreglo de minas adjacentes.Y como cada número aparece solo una vez en la secuencia. 1. donde 'A'=1 y el fin de la cadena es igual a 0. un grupo cuyo número menor es x. Ello requiere una resta y a lo mas 6 sumas y 6 multiplicaciones por palabra.Buscaminas Solución 1 Simplemente tener un arreglo con el numero de minas adjacentes. Asi que la primera letra de la palabra es el sexto dígito de derecha a izquierda en nuestro número que estamos generando. peor caso.

En resumen. si un grupo A se puede fusionar con un grupo B pero se fusiona con C. su tiempo de ejecución es O(NlogN). forzosamente se tiene que fusionar al grupo que contenga a y+1. Página 52 de 70 . mayor es y. recorrerla de adelante para atras y de atras para adelante indefinidamente podría no funcionar dentro de los límites del tiempo de ejecución. el grupo resultante todavia se podrá fusionar con B. tenemos un algoritmo que si en cada recorrido cada grupo se fusiona con otro. como son muchos números en la lista. Sin embargo. y el grupo resultante se todavía se podrá fusionar con el que contenga a la x-1. Asi que es mejor tener una lista doblemente enlazada de grupos. y cada que se fusione un grupo con otro tomar el grupo resultante como un solo elemento de la lista(esto se puede hacer en tiempo constante).Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Como resultado.

es decir. ya que al llegar a cada nodo se pueden elegir en el peor caso entre 3 aristas mas para continuar con la busqueda. y cada arista representa a una calle. conforme se vayan añadiendo las aristas saber qué nodos son conexos con el nodo 1. Así que formalmente esto es lo que se pide: Dado un grafo no dirigido G={V. en el cual cada nodo representa a una esquina. (Nótese que para evitar que el programa es cicle es mejor probar solo los caminos que no pasen 2 veces por el mismo lugar) Esta solución es claramente de complejidad O(3^N). La razón por la que no se hace la búsqueda cada que se pregunta por un nodo sino cada que se añade una arista es muy simple: No se sabe cuantas preguntas se van a hacer(hay un número ilimitado de preguntas). Por ello la complejidad de esto es O(MN). 2. inicialmente con 0 elementos en el conjunto A. si el nodo 1 es conexo con algun otro nodo. cada que la entrada haga una pregunta. Solución 3 – M Búsquedas N visitas La solución optima de este problema está basadado en llevar un registro de los nodos a los Página 53 de 70 . Como solo es necesario saber si se puede llegar a cada nodo o no se puede solo es necesario visitar cada nodo una vez.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. pero si se sabe que no hay mas de 4 aristas por nodo(tambien hay que fijarse si la entrada menciona varias veces la misma arista.. Solución 2 – M Búsquedas Otra forma de resolver el problema es hacer una búsqueda en amplitud o profundidad empezando en el nodo 1 cada que se añada una arista. A}. Solución 1 – Exhastiva Una manera de resolver el problema es.1. porque tampoco hay restriccion para eso). probar todos los caminos posibles que inicien en 1 hasta encontrar un camino que llegue a C o ya se hayan probado todos los caminos posibles.Terremoto Estructura de la Solución ¿Qué es lo que se está pidiendo? La ciudad puede ser representada por un grafo.. Lo que se quiere saber es si hay por lo menos un camino para ir desde el nodo 1 a algún otro nodo.Soluciones a los Problemas de Búsquedas 2. Esta fue la solución pensada para dar el 80% de los puntos.

Si se mira bien el problema. sino las componentes conexas(los conjuntos de vertices en los cuales todos sus nodos son conexos entre sí). solo hay que buscar la raiz de dicho arbol. no importa realmente el acomodo de las aristas. Cada que se añade una arista hay que fijarse si se podía llegar a uno de los dos nodos y al otro no. Página 54 de 70 .Otra Vez sumas Estructura de la solución ¿Qué es lo que se está pidiendo? El número de posibles conjuntos de números enteros positivos cuya sumatoria sea n. Inicialmente todos los nodos se consideran padres de si mismos. Suena un poco compliado este metodo pero es el mas cómodo de implementar. Y comparar ambas raices. en caso de que asi sea. Solución 4 – Unión-Pertenencia Esta solución es menos eficiente que la solución 3 y no está basada en búsquedas. por ello está solución es O(N+M) y está pensada para ser la solución de 100 puntos. Esta solución requiere de logN operaciones cada que se añade una arista. al principio se puede llegar al nodo 1. Ello quiere decir que en el peor caso son NlogN operaciones por preguntas y MlogN operaciones por añadir aristas. 2. la cual apunta a su padre. En esta solución cada nodo solo se visita una vez.2.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. y logN operaciones por cada pregunta.Aunque bien implementado se puede optimizar para que por cada nodo se ejecuten a lo mas logN operaciones en preguntas. que se puede llegar y nunca borrarlo. sin embargo tambien podía dar 100 puntos.. b cualesquiera basta con buscar la raiz de ambos árboles y apuntar la raiz de uno de ellos a la raíz de el otro árbol. por ello. Cada componente conexa se puede representar como un árbol. para añadir una arista en el grafo entre dos nodos a. ya que en éste tipo de árboles cada nodo tiene una sola arista. y cada arista se añade en tiempo constante. para saber si 2 nodos estan en el mismo árbol. se hace una busqueda desde el nodo que no se podía llegar y se marcan como conexos a todos los nodos visitados. En el momento que se haga una pregunta simplemente se dice si está marcado o no como conexo. Así que la complejidad total es O((M+N)logN).

fin. luego todas las que empiezen con 2 y asi sucesivamente ir contando aquellas secuencias que sumen n. Tambien hay que tomar en cuenta que los casos en los que n<=0 deben producir de salida 0.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. si(suma>N) => regresa. El todo es menor que 1. fin. ultimo) inicio si (suma==N) => inicio contador++. ¿cómo hacer esto?. el backtracking sería probar de manera recursiva primero todas las que empiezen con 1. El siguiente pseudocodigo resuelve el problema para el 80% de los casos: 1. . Solución 1. En general es necesario implementar una función recursiva a la que haya que pasarle 2 parametros: La sumatoria de todos los numeros anteriores y el últiimo número que se colocó en la secuencia. puesto que el menor entero positivo es 1 y con los números enteros positivos el todo siempre es mayor que sus partes. Y cada que se llama a la función recursiva. Solución 2 – Recursión con Memoria Página 55 de 70 . Pero para generar solo sencuencias ordenadas hay que pasar un parametro que diga el mínimo número que puede contener el proximo número de la sencuencia. Así. ésta se debe de llamar con números mayores o iguales al ultimo número colocado en la secuencia. La complejidad de esta solución es dificil de definir a ciencia cierta.Backtracking Una forma que quizá se puede ocurrir al instante es probar todos los conjuntos posibles. funcion(suma. suma+i). regresa. pero basta con hacer algunos casos de prueba a mano para darse cuenta que no funciona en tiempo para números mayores que 100. para i=ultimo -> N-suma hacer inicio funcion(i. no existe forma alguna para esos casos. ya que eso garantiza que nunca se probaran 2 veces una permutación de los mismos números.˙. fin. probar todos los conjuntos de números posibles es equivalente a probar todas las secuencias ordenadas de números.

en lugar de llevar un contador con la sumatoria de todos los anteriores es posible llevar un contador que diga cuánto falta sumarle. Solución 3 – Programación Dinamica De la misma complejidad que la recursión con memoria es posible. Solución 1 – Generación de Permutaciones La idea aquí es generar todas las permutaciones y cada permutación que se genere compararla con la permutación de entrada. a excepción de cuando i=0. El órden lexicográfico está explicado en el problema mismo. j)+sumas(i-(j+1). simplemente escribir cuantas permutaciones se Página 56 de 70 .3 Tiempo Malgastado Estructura de la solución ¿Qué es lo que está pidiendo? Dada una permutación. (j+1))+. pero nótese que se puede llegar a llamar varias veces a la función con los mismos parametros.. Cambiando un poco el enfoque del algoritmo 1 . este algoritmo funciona para el 100% de los casos.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. j) es el número de formas posibles de obtener i como suma de 1 o más enteros positivos. ya tenemos la subestructura optima mencionada anteriormente: sumas(i.+sumas(i-i. 2. es posible guardar en una tabla los valores que vaya devolviendo por la función y así no calcular mas de una vez el valor que devuelve para los mismos parametros. pero b no puede ser mayor que a. i) sumas(0. El parametro a puede variar entre 0 y n igual que el parametro b. j)=sumas(i-j. Hasta ahora no se ha disminuido la complejidad del problema. Y para calcular cada uno de ellos hay que recorrer un bucle de longitud (n-a)-a=n-2a. Y al encontrar la permutación de entrada. por ello hay n²/2 parametros posibles. decir que número de permutación es en orden ascendente lexicograficamente. al mismo tiempo que se van contando las permutaciones generadas. lo cual es una expresión lineal. ya que i=0 indica que se terminó de contar.. por ello la complejidad de este algoritmo es O(N³). x)=1 para toda x que pertenezca a los números enteros Donde sumas(i. Pero ya que no es un N³ completo sino que tiene muchas podas. b) devolvería el núemero de formas de sumar a como suma de 1 o mas enteros mayores o iguales que b. De esta forma funcion(a.

” Además ofrece un código en C y otro en Pascal donde genera permutaciones lexicográficamente. si se considera que se estuvieran generando lexicograficamente las permutaciones. 3. simplemente hay que contar cuántas veces cambió el primer número para llegar a su estado actual. En general. 2. 3! permutaciones que empiezan con 2. Por ello. que si un número no solo puede ser colocado en una casilla Página 57 de 70 . hay exactamente (n-1)! permutaciones que empiezan con cada número. Es decir. cuando la solución es unica. Si alguien quiere verlo aún sigue en la sección de material de estudio. y esta pensada para ser una solución para el 80% de los casos. en {1. luego las 6 que comienzan con 2. notarás que las 24 permutaciones de los cuatro números 1. y de n-1 números tiene (n-1)! permutaciones. Dado que hay n! permutaciones para n elementos. Por ejemplo. en cada columna y en cada región cada número debe aparecer una y solo una vez. podemos saber que en un conjunto de n números. si las necesitaramos ¿cómo las generaríamos? Para darnos una idea. generaron para llegar a ella.4 Sudoku Existen muchas formas de resolver el Sudoku. Esto se puede hacer facilmente en O(n²) 2. esto implica. demos un vistazo a las 4! = 24 permutaciones de los números 1. luego las 6 que comienzan con 3 y finalmente las 6 que comienzan con 4. 2. Si observas bien. cuantas veces cambió el segundo número luego de que el primer número se encontraba en su estado actual. etc. la complejidad de esta solución es O(n!). hemos dividido la tarea de escribir las 4! permutaciones en las 4 tareas de escribir un elemento y las 3! permutaciones de los 3 restantes. 3 y 4 se pueden obtener de la siguiente forma: primero escribamos las 3! = 6 permutaciones que comienzan con 1. suele ser suficiente una busqueda exhastiva con podas muy agresivas. en la sección de material de estudio. 3 y 4: 1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2432 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321. “Una Breve Introducción a la Recursión”. y asi sucesivamente.1 y dijimos que n! contaba el número de ellas. Se sabe que en cada fila. podemos dividir la tarea de escribir las n! permutaciones de n elementos en las n tareas de escribir uno de ellos y las (n-1)! permutaciones de los demás. 4} hay 3! permutaciones que empiezan con 1. Pero. Si fueron atentos. hay unas notas sobre la recursividad donde Franz explica claramente la manera de generar permutaciones: “Ya habíamos hablado de las permutaciones en la sección 2. 2. Solución 2 Volviendo a mencionar que un conjunto de n números tiene n! permutaciones. sin embargo.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.

columna o región. y el número de pasos requeridos para encontrar la solución es exponencial. nótese que el ciclo contiene una arista que apunta desde el nodo 1 y otra arista que apunta al nodo 1. Asi que cambiando un poco la tarea.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Otro problema es que por mas que se pode al principio. 2. habrá que regresar al estado anterior a colocar aquel número.5 Burocracia interminable Solución ¿Qué nos estan pidiendo? Dado un grafo dirigido. De igual forma. Solución 2 – Busqueda en Amplitud Considérese el ciclo mas corto. encontrar el ciclo mas corto que contenga a un nodo etiquetado como 1. Solución 1 – Backtracking Una forma de solucionar este problema es probar todos los caminos posibles excepto aquellos que sobrepasen al mejor camino encontrado al momento. que contenga al nodo 1. forzosamente ese número se encontrará en aquella casilla. sin embargo hay que tener cuidado. (Con tan solo 15 casillas que queden vacias el programa tendría que probar una cantidad muy grande de casos). eso quiere decir que si solo un número puede ir en ella. Si se borra la arista que apunta desde el nodo 1 tendremos un camino. Una busqueda exhastiva recibía 50% del puntaje. Para solucionar esto. simplemente hay que encontrar el camino mas corto que inicie en un nodo que esté a distancia 1 del nodo 1. Esta solución es O(N!) y el 80% de los casos estan hechos para funcionar sin problemas con esta solución. ya que si se coloca un número equivocado. Haciendo esto antes de comenzar la busqueda ahorra trabajo. forzosamente ese número tiene que ir ahí. una busqueda ligeramente podada 70% y una búsqueda con todas las podas mencionadas 100%. y que termine en el nodo 1. y en ciertas ocaciones con solo hacer esto se resuelve el sudoku sin necesidad de hacer la busqueda(no siempre). de una fila. Esta poda es muy poderosa. es muy propenso a que queden varias casillas vacías. cada casilla debe tener un número. por ello hay que ir guardando en qué orden se fueron colocando los números para posteriormente borrarlos en caso de que sea necesario. Página 58 de 70 . la poda aplicada antes de la búsqueda se puede aplicar luego de añadir un número arbitrariamente a la cuadricula.

la mas recomendada es tener un arreglo con las áreas de cada color. y el area de cada uno de ellos. se nos pide que determinemos el número de cuartos. Luego.6. se pueden meter inicialmente a la cola todos los nodos a los que apunta el nodo 1. y qué pared tenemos que quitar para conseguir un cuarto lo mas grande posible. cualquiera es buena). y por cada módulo sin colorear que se encuentro.(ya sea amplitud o profundidad. Un bueno y conocido algortmo para determinar los cuartos está basado en colorear los modulos. es un máximo conjunto de módulos conectados. Para hacer esto es necesario recorrer todos los modulos del castillo. Esta solucón es O(N) y funciona en el 100% de los casos. Página 59 de 70 . Continuando con el color 2 se colorea cualquier módulo que no haya sido coloreado y todos los módulos conectados con él. Solución El área de un cuarto es el número de modulos que contiene. el área del cuarto mas grande. simplemente hay que repetir esta operación hasta que todos los módulos esten coloreados. Asi que basta con recorrer el mapa y por cada pared que se encuentre ver si los modulos que conectan estan coloreados de 2 colores diferentes.. es facil determinar el área del cuarto mas grande que puede ser formado derribando una pared y alguna pared que forme un cuarto con esa área si se derriba. Ya sabiendo el número de cuartos.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. usando un color diferente para cada cuarto(cada color se puede representar como un número).Hotel Gobernador Estructura de la Solución Dado un hotel. 2. luego se colorean todos los modulos conectados con este haciendo una búsqueda. y cada que un modulo sea coloreado. Para hacer eso. y de ser así. Se empieza coloreando con el color 1 una esquina del hotel. Nótese que cada pared conecta a lo mas a 2 cuartos. y luego de eso una busqueda en amplitud. Hay muchas maneras de determinar el área de los cuartos. Dos modulos podemos decir que estan conectados si y solo si no hay pared entre ellos. verificar la suma de las áreas de los cuartos que poseen esos colores. Eso significa que el área del nuevo cuarto que se puede formar(si es que se forma uno nuevo) es la suma de las áreas entre los cuartos que conecta. colorearlo del siguiente color y buscar los módulos conectados con él. Un cuarto. aumentar el área en el arreglo. Esta solución es de O(NM) y funciona para todos los casos.

Esta solución es O(N²) y puede funcionar incluso para N superior a 1000. ya no es necesario seguir buscando. una manera de acercarse mas rapido a la solución es ordenar primero toda la secuencia y comenzar a formar el subconjunto a partir de los números mas grandes en la secuencia y por cada “retroceso” de la búsqueda a partir de uno de los números “grandes”. tales que A. Otra poda factible es de paridad. 2. es decir. 2.8. Esta poda mejora sustancialmente el rendimiento del programa. Sea X un subconjunto de V tal que para cada elemento de X exista a lo menos un camino Página 60 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Solución 2 – Programación Dinamica(Knapsack) Este es una variante del clásico problema de la mochila o knapsack.-El Coro de la Iglesia Estructura de la Solución Dado un conjunto de números. Como el conjunto puede tener hasta 30 elementos. D pertenecen a V. a encontrar un conjunto de sumatria igual a k. es posible reducir el problema. y el resto de los elementos que no se han añadido al conjunto es par. B. 4 nodos A.Backtracking Como la suma de las sumatorias de los 2 conjuntos dan como resultado la sumatoria del conjunto de entrada. hay que dividirlo en 2 subconjuntos tales que la sumatoria de uno sea igual a la del otro. C. E}. y F tal que F sea un subconjunto de E. y si la sumatoria sobrepasa a k. buscar a partir de los “pequeños” y por cada retroceso de los “pequeños” buscar a partir de los “grandes”. y por supuesto. Como ambos conjuntos deben de ser del mismo tamaño. si k es impar. C y D. Solución 1. la original fue escrita por Tom Verhoeff. donde k es la mitad de la sumatoria del conjunto de entrada. aunque tambien existen otras soluciones.. ya no es necesario seguir buscando. simplemente hay que ver si se puede llenar una mochila de tamaño k con objetos que contengan como volumen cada número de la secuencia. Pero aún asi.Perro Estructura de la solución Dado un grafo G={V. esa poda no sería suficiente. Existen otras podas de divisibilidad parecidas que queda como tarea encontrar. hay que evitar sumar 2 veces el mismo conjunto. NOTA: Esta solución fue traducida y adaptada. La poda mas obvia es conforme se va generando cada subconjunto se va obteniendo su sumatoria. B.7. Asi que es necesario hacer algunas podas. no es posible probar todos los subconjuntos posibles(hay aproximadamente mil millones de subconjuntos).

Asi que basta con hacer una búsqueda en amplitud iniciando con O. Ya sabiendo los nodos que pertenecen a X. y D los bares donde estan Greg y Stef. Determinar el camino mas corto entre A y B. y X los lugares a donde Greg y Stef puedan llegar.Sokoban Estructura de la solución Se tiene una cuadricula de 7x7 en la cual cada casilla puede tener 2 valores: pared o suelo. Modelo o espacio de Búsqueda a utilizar La cuadricula tiene un total de 7x7=49 casillas. Por lo tanto. basta con hacer una busqueda en amplitud metiendo inicialmente a la cola A. se deja de buscar debido a que se acaba de encontrar el camino. Un poco mas claro: A es el nodo de la casa de Miranda. Dada una cuadricula. y se marcan los nodos a los que se pueda llegar. y tomando en cuenta que esta rodeada por paredes. Página 61 de 70 . E el conjunto de calles. V el conjunto de de esquinas. el obrero puede estar en a lo mas 5x5=25 casillas y la caja a su vez tambien puede estar en 25 casillas. las posiciones de los 2 objetos y un lugar de destino. 2. donde O es la casilla en la que se encuentra inicialmente el obrero y C es la casilla donde se encuentra inicialmente la caja. tan solo se hace una busqueda en profundidad con C y D recorriendo solo aristas etiquetadas como 1. F las calles por donde pueden pasar Greg y Stef. y durante la busqueda evitar meter los nodos marcados. Y) almacena el valor del camino mas corto encontrado para que el obrero se encuentre en la posición X y la caja en la posición Y. C. para llegar a C o a D tan solo usando aristas pertenecientes a F. se tienen menos de (25)² estados posibles a los que se puede llegar. Todos los bordes de la cuadricula son paredes. tambien sabemos de 2 objetos que se encuentran en la cuadricula(el obrero y la caja) y las reglas para mover esos 2 objetos. determinar el mínimo número de movimientos para llevar la caja al lugar de destino.9. D) donde X es cualquier casilla y D sea la posición de destino de la caja. eso hace posible hacer una tabla(X. Y ademas. B es el nodo donde se encuentra la Iglesia. determinar el camino mas corto desde A hasta B sin pasar por ningun nodo que pertenezca a X Solución Saber qué nodos pertenecen a X es facil..Examenes de Preselección para la IOI 2006 Problemas y Soluciones. C. Y) de a lo mas 49x49 donde tabla(X. que no contenga nodo alguno que pertenezca a X. Una vez que se llegue a la posición (X. Solución – Busqueda en Amplitud A cada casilla se le puede asignar un número del 1 al 49 o del 1 al 25 dependiendo de cómo prefiera hacerlo el programador.

Esto hace que sea mas dificil que queden fichas aisladas y es muy probable encontrar mejores resultados que en la solución 1. siguiendo las reglas del comesolo. Se repite esta operación hasta que parezca no haber ya mejoras en las estrategias. Página 62 de 70 . Espacio de Búsqueda o Modelo a Utilizar Este problema es un NP(No Polinomial). en ese momento es conveniente generar mas estrategias aleatoriamente.Aleatorio Se realizan movimientos arbitrarios hasta que no se puedan realizar mas. Solución 1 . de esta población se eligen las mejores y se mezclan entre si. Solución 3 – Genetico Esta solución consiste en generar aleatoriamente un cierto número de estrategias a las cuales llamaremos población. ningun algoritmo es perfecto ni toma en cuenta todos los espacios de búsqueda. Los algoritmos que se encargan de hacer esto son los algoritmos heuristicos. determinar encontrar una secuencia de movimientos que. Existen muchos algoritmos para resolver este problema. moverla. luego de la población resultante se vuelven a seleccionar los mejores y a mezclarse entre si.Glotón Se obtienen las distancias entre todas las fichas del tablero(esto puede ser despues de haber eliminado algunas para agilizar el proceso). sin embargo. y la estrategia sea recorrer la secuencia de izquierda a derecha y la primer casilla que encuentre que se pueda mover. esto significa que no existe solución eficiente que pueda encontrar la solución optima.10 Comesolo Estructura de la Solución Dado un tablero de comesolo. ya que es facil eliminar muchas fichas. Solución 2 . y siempre se mueve la ficha que minimize la sumatoria de las distancias entre las fichas. aquí se muestran algunos de ellos: Modelo 1 Una cuadricula en la cual se pueden hacer movimientos irreversibles. Un ejemplo de estrategia(aunque no necesariamente el mejor) sería que cada número represente una casilla de la cuadricula. elimine fichas. es posible encontrar buenas soluciones en un tiempo razonable aunque no necesariamente son las optimas. Esta solución da mas del 50% de los puntos. cuantas mas. Modelo 2 Una secuencia de números representa una estrategia para eliminar números en la cuadricula.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. mejor. mezcla de las dos anteriores. Dos estrategias se pueden combinar para dar origen a una nueva estrategia. Cada estrategia produce una única solución. generando nuevas estrategias en la población. Se repiten los pasos anteriores hasta obtener una estrategia satisfactoria. pero conforme van quedando menos se va haciendo mas dificil eliminarlas. 2.

max(m) el mayor elemento que se encuentra en el conjunto y min (m) el menor elemento que se encuentra en el conjunto. Solución – Glotón Sea m el conjunto dado. Llamemosle Z a la sumatoria de los K números.1. la media aritmetica no puede ser mayor que max(m). ahora. 3. por ello.Soluciones a los Problemas de Algoritmos Glotones y Divide y Venceras 3. K números no mayores que max(m) tales que su suma es mayor que max(m)*K y por lo menos uno de ellos es menor que max(m). 3. Z/K<max(m) !. Aplicando el mismo principio se puede demostrar que min(m)*K es el monto menor. por la construcción debe existir algun número de dicha secuencia que sea menor que max(m).2.-El Ladrón y la Mochila Estructura de la Solución Dado un conjunto de números y K.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. se quiere saber cual es el conjunto de mayor sumatoria y el de menor sumatoria tal que tenga exactamente K elementos y que todos sus elementos tengan correspondencia biunivoca con al menos un elemento del conjunto dado. Tenemos que: Z>max(m)*K Z/K>max(m) Nótese que Z/K es la media aritmetica del conjunto de números de la solución.. Tenemos que el mayor monto robado es: max(m)*K y el menor monto robado es: min(m)*K Prueba Supongamos que hay una mejor solución que max(m)*K.-K-Ceros La estructura de la solución está descrita en el mismo problema. por ello se puede obviar. como los números son no mayores que max(m). es decir. Página 63 de 70 .

el número de factores divisibles entre 25 a n/25.(n) Nótese que cada 5 números en la factorización dada hay un número divisible entre 5. el i-esimo número de la secuencia es igual al ((i-1)-ésimo)i. el número de 0s que tiene a la derecha n! es el número de 5s que tiene en sus factores primos. 3. Por inducción es posible probar que la incidencia del 2 siempre será mayor que la del 5. y asi sucesivamente. será equivalente al número de parejas que se puedan formar con 5 y 2 en los factores primos de n!. en cada posición par de la secuencia el exponente del 2 en los factores primos aumentará. Contar el número de factores divisibles entre 5 se reduce simplemente a n/5. Algoritmo Auxiliar . contador=contador+n/x. el número de ceros que tenga a la derecha n!. por lo tanto... (x+1)! contiene todos los factores primos de x!. x=0. 2. cada 25 números un número divisible entre 25.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Como ya vimos anteriormente. como ya se vió. El siguiente algoritmo cuenta el número de 0s a la derecha de n!: 1. Página 64 de 70 . y además los factores primos de x+1. Tenemos que si 10^k | x! => 10^k | (x+1)! Prueba 10^k divide a x!. en tal secuencia. x!(x+1)=(10^k)(c)(x+1) Por definición de factorial (x+1)!=x!(x+1) sustituyendo (x+1)!=(10^k)(c)(x+1) => 10^k | (x+1)!. etc. tal que x!=(10^k)(c). Modelo a Elegir Se tiene la secuencia de los números factoriales. Sabemos que 10=(5)(2). 5. contador=0. x=x*5. consideremos la factorización de n! n!=(1)(2)(3)(4)(5)(6)(7)(8). por lo tanto existe un número entero c. Sabemos que la cantidad de 0s que tiene a la derecha un número es equivalente al exponente de la mayor potencia entre 10 que divida al número. Multiplicando ambos miembros por (x+1). Ello significa que si se genera la secuencia de los factoriales. por ello. mientras(x <= n) 4.¿Cuántos 0s tiene a la derecha n!? Ya sabiendo que simplemente es necesario encontrar el número de 0s en sus factores primos. y en cada posición divisible entre 5 el exponente del 5 aumentará.

Solución 2 – Árbol Binario de Busqueda Otra forma mas eficiente de resolver este problema es construyendo un arbol binario de búsqueda(sin equilibrarlo). Página 65 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Solución 1 – Fuerza Bruta Ya sea contando el número de parejas o simulando la burbuja y contando los intercambios. Una forma de encontrar k es contar los 0s en el factorial de cada número entre x/2 y x. b. etc se encontrará en tiempo logaritmico un x! tal que (x/2)! tiene menos de m ceros a la derecha y x! tiene al menos m ceros a la derecha.. . en algun momento hace un intercambio entre cada par de números a. Existe una gran cantidad de soluciones para este problema que no se van a exponer aquí. y en la rama derecha si es mayor o igual. es posible hacer una busqueda binaria en el rango de x/2 y x. Solución 2 – Búsqueda Binaria Sabemos que (x+1)! tiene igual o mas ceros a la derecha que x!. es contando los 0s para 1!. contando los 0s a 1!. luego a 2!. Asi que. la solución en los dos de los casos es cuadrada. luego a 4!.3. Por ello. ya sabiendo como contar el número de 0s. Solución 1 – Buqueda Secuencial Ahora. pero a nadie le hace daño buscarlas. tales que a se encuentra antes que b y a>b. si contamos los 0s de x! ya sabemos que ningun y! para y<x existe tal que y! tenga mas 0s a la derecha que x!. Sin embargo. k!. Se requiere encontrar una solución mas eficiente. hacer eso sería tal como buscar en un diccionario la palabra deseada leyendolo desde el principio hasta el final sabiendo que estan en órden alfabetico. por lo tanto. el procedimiento de inserción es el mismo que con cualquier otro arbol binario de busqueda: Se inserta en la rama izquierda si el número nuevo es menor. una posible forma de encontrar k tal que k! tenga al menos m ceros a la derecha y (k-1)! tenga menos de m 0s a la derecha. dada una secuencia S. por lo tanto x/2<k<=x. Esta solución contiene varias podas obvias. 2!. Esta solución es O((logN)²) y funciona para el 100% de los casos. se requiere encontrar el número de parejas de números x. independientemente del órden. . 3. Asi que. tal que S[x]>S[y] y x<y.. como la de buscar solo con factoriaes multiplos de 5 y es O(NlogN).Cuenta Burbujas Modelo o Espacio de Búsqueda El algoritmo de burbuja.. 3!. y.

cada que se inserta un elemento se retira de su secuencia original. num) sino insertar(hijo_derecho(nodo). 4. 9. cada elemento que se inserta siempre será el mas grande entre el ultimo de la secuencia A y el ultimo de la secuencia B.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 5. aunque el caso promedio funciona en tiempo proporcional a NlogN. Cuando eso suceda cada una de estas secuencias se ordena por burbuja y se cuentan sus intercambios. por lo tanto. todos ellos se habrían intercambiado en burbuja. quiere decir que el ultimo elemento de A se va a intercambiar en burbuja por cada elemento de B. El siguiente algoritmo ilustra el procedimiento de inserción que cuenta los intercambios en burbuja: 1. es posible dividirla en una secuencia de N/2 elementos Vence Cada una de estas secuencias de N/2 elementos se divide recursivamente hasta que el tamaño de cada secuencia sea de 1 ó 2 elementos. una secuencia ordenada tardaría un tiempo proporcional a N². si en algun momento se inserta en la rama izquierda. A a la izquierda de B. Si el ultimo elemento de A es mas grande que el ultimo elemento de B. 7. por ejemplo. 6. todos los que se insertaron en la rama derecha son números mayores que él que se insertaron antes. num) Esta solución funciona en el 100% de los casos. Solución 3 – Divide y Venceras Divide Consideremos una secuencia S de N elementos. se deben contar todos los elementos de B como intercambios. Combina Teniendo ya dos secuencias ordenadas A y B. sino si num<valor(nodo) contador=contador+nodos_rama_izquierda(nodo) insertar(hijo_izquierdo(nodo). Nótese que al insertar un nuevo nodo. Sabemos que el ultimo elemento de C debe ser el mas grande entre el ultimo elemento de A y el ultimo elemento de B. 8. funcion insertar(nodo. 3. Entonces. 2. la secuencia C se puede obtener insertando elementos de derecha a izquierda (primero los mas grandes y luego los mas pequeños). sin embargo. ya que el Página 66 de 70 . y cada que se inserta un elemento de A. obtendremos una secuencia ordenada C como unión de las secuencias A y B. num) si vacio(nodo) valor(nodo)=num. se pueden construir peores casos.

q.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.p.q.. y ya tendremos contados el número de intercambios en burbuja en O (NlogN).r) // ORDENA LA MITAD DERECHA 5 Mezcla(A. simplemente hay que combinar todas las secuencias hasta formar una secuencia de N elementos ordenada.4.1 20 fin-Si-entonces 21 fin-desde 3.n2 + 1] 5 desde i:=1 hasta n1 haz 6 L[i]:=A[p + i .n1 + 1] 4 Crea arreglo R[1.Desconectando al Enemigo Estructura de la solución Dado un grafo conexo no dirigido con N nodos y N-1 aristas. elemento insertado. El siguiente código muestra el algoritmo de mezcla.r) 1 n1:=q .p. Ordena-Mezcla(A.p + 1 2 n2:=r .q 3 Crea arreglo L[1.p.1] 7 desde j:=1 hasta n2 haz 8 R[j]:=A[q + j] 10 i:=n1 11 j:=n1 12 desde k:=r hasta p haz inicio 13 Si L[i] > R[j] entonces inicio 14 A[k]:=L[i] 15 i:=i – 1 16 contador:=contador+j 17 Si-No entonces inicio 18 A[k]:=R[j] 19 j:=j . en burbuja se intercambiaría con todos los elementos de B.q) // ORDENA LA MITAD IZQUIERDA 4 Ordena-Mezcla(A. Ahora.q+1. determinar el número mínimo Página 67 de 70 ..r) 6 fin-Si-entonces La parte mas compleja de este algoritmo radica en la función mezcla: Mezcla(A.r) 1 Si p < r entonces inicio 2 q:=(p + r) div 2 3 Ordena-Mezcla(A..p. Este algoritmo tambien es conocido como ordenamiento por mezcla.

8 regresa(borrar). El siguiente pseudocodigo muestra la busqueda en profundidad aplicando el principio mencionado: 1 Funcion DFS(nodo) 2 borrar=falso. por ello. de nodos que se tienen que suprimir para que el grafo quede sin aristas(cada que se suprime un nodo se borran las aristas adjacentes con este). Y si se conserva al nodo. Esta solución funciona en el 100% de los casos. si se borra el resto del grafo. 6 si borrar 7 contador=contador+1. el número de nodos sin borrar será igual o mejor que si no se conservara. Se puede hacer una busqueda en profundidad tomando en cuenta estos criterios. nunca hay arista que una a 2 nodos ya colocados anteriormente. solo habría que borrar al padre directo. y se deja solo el nodo X que quedó sobrando. de esa forma. un nodo debe ser borrado si y solo si alguno de sus hijos no fué borrado. si cada nodo se asocia a una arista. que lo une con algun otro nodo. es un árbol. de esta forma se encuentra el minimo de nodos a borrar en tiempo lineal. la cual apunta a su padre. Por ello. en ambos casos se borra un solo nodo y la parte del grafo que queda conexa despues de borrar el nodo es subconjunto de la parte del nodo que queda conexa despues de borrar el padre directo del nodo. luego los nodos cuyo camino mas corto con X sea 2. 3 Para cada hijo i de nodo 4 si(DFS(i)=verdadero) 5 borrar=verdadero. La comprobación de lo anterior es bastante simple: Si todos sus hijos fueron borrados solo tiene una arista.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. tambien hay que borrar al padre del padre directo. si se quiere volver a generar el grafo inicial. Asi que. Es decir. es decir. borrar el nodo y conservar a su padre. Modelo o Espacio de Búsqueda El grafo pose N-1 aristas. Página 68 de 70 . aquí se pueden hacer dos cosas. si se conserva siempre todo nodo que no tenga hijos que no hayan sido borrados. es decir. Nótese que si se conserva al padre directo. Solución – Glotón Todo nodo de un árbol solo tiene arista con su padre directo y con su(s) hijo(s) directo(s). sobra un solo nodo. primero colocando los nodos cuyo camino mas corto con X sea 1. o borrar a su padre y conservar el nodo. se observa que por cada nodo que se va colocando se va colocando una arista. Podemos concluir que el grafo no tiene ciclos.

en su mayoría O(NlogN). j)+1>d(x. k)=d(p(j). sea g cualquier casilla y h una casilla adjacente a g. por lo tanto d(x. p(y)=p(x). Este problema presenta muchas soluciones. tal que d(p(j). j)+1. y sea k una casilla adjacente a j. | d(i. recordando que cada casilla tiene 4 lados. v. se busca p(j) y se aumenta su contador respectivo. k)=d(x. S)|=1. j) => d(x.. j)+1 d(x. j)∓1 d(x. entonces p(u)=p(v).5. aquí se mostrán algunas basadas en Divide y Venceras. x). nótese que cada casilla que se agrega en la misma dirección. y por lo tanto va a pertenecer al mismo competidor. k)>d(p(j). para que R y S tengan un lado en común. y para cada casilla j. Si d(p(x). j)-1 d(x. Prueba: Generalizando la proposición 2. si p(u)=p(w). u)<d(p(u). Rx-Sx=0 o Ry-Sy=0. el lado de g opuesto al lado que comparte con h es compartido con otra casilla m. S) | = 1 Prueba: Sabemos que d(i. j)+1<d(p(j). Proposición 2: Sea p(j) el competidor al que pertenece la casilla j(es decir. j) la distancia entre el competidor i y la casilla j. j)<d(p(j). Prueba: Sabemos que d(p(j).La Tecnica de la Indiferencia Observaciones Proposición 1: Sean R y S dos casillas adjacentes de la cuadricula(con un lado en común). |d(i. w son casillas que estan sobre un mismo eje. h)+2. w casillas sobre un mismo eje. j)=|ix-jx|+|iy-jy|. tanto p como h comparten uno de ellos. además. m)=d(p(g). j) siendo x cualquier competidor diferente de j d(p(j). y p(u)=p(w) Página 69 de 70 . Esta solución es O(N²) Solución 2 – Reducción a cuadrados Se sabe que si u. entonces p(h)=p(g). si d(p(h). uno para cada competidor. pero hay muchas mas soluciones ¡incluso hay algunas de O(1)! Solución 1 – Fuerza Bruta Simplemente se recorre la cuadricula con 4 contadores. j)>d(x. y)>d(p(x). sea d(i. y además |Rx-Sx|=1 ó |Ry-Sy|=1 por lo tanto. la guía que está en la casilla j se va con p(j)). tal que d(p(g). k) y p(k)=p(j) Proposición 3: Sean u. v)<d(p(u). por ello. j) => p (k)=p(j). k)<d(p(j). va a estar una unidad mas lejos.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. R)-d(i. g)+1=d(p(g). w). tal que d(p(u). g)=d(p(h). h)+1. 3. R) – d(i.

y si p(u)=p(w)=p (u)=p(s). Página 70 de 70 . de la cuadricula.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Asi que. u y s en el eje y. si se implementa planteando con despejes de ecuaciones esta solución es O(N). toda casilla p(j)=p(u) para toda casilla j dentro del rectangulo. sino. si u y w estan alineados sobre el eje x. y si se hace con busqueda binaria es O (NlogN) Solución 4 – Buscar vértices Esta claro que el área que pertenece a cada jugador es un poligono convexo con todos sus ángulos múltiplos de 45°. Estos vértices pueden ser encontrados a traves de múltiples búsquedas binarias o igualmente con despejes. determinar cuantas casillas le pertenecen a cada quien. se divide el cuadrado en 4 cuadrados mas pequeños y en cada uno se repite la operación. todo el cuadrado pertenece al mismo. Solución 3 – Fila por fila Para cada fila. se puede dividir el rectangulo inicial en 6 cuadrados. estas 4 casillas formarán un rectangulo. y sean s y t otras casillas tales que s y t esten alineados en el eje x. entonces. y recursivamente contar cuantas casilla pertenecen a cada competidor de la siguiente manera: Si las 4 casillas de las esquinas pertenecen al mismo. y w y t en el eje y. por ello no es muy complicado encontrar los vértices de dicho polígono. Por ello. ya sea a base de ecuaciones o por búsqueda binaria. toda casilla p(u)=p(v) para toda v que se encuentre entre u y w.