Problemas y Soluciones Preselectivos

March 22, 2018 | Author: Manuel Gómez Enríquez | Category: Discrete Mathematics, Mathematics, Physics & Mathematics, Science, It/Computer Sciences


Comments



Description

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 [email protected] 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 después el subárbol de la derecha y al final la raíz ● ●   ● ●   Preorden: PLOMIAIAD Orden: OLIMPIADA Página 4 de 70 .-Árboles (acm. 1.1. 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.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Para cada uno de estos recorridos.  Existen tres formas comunes de recorrer un árbol binario: preorden. La diferencia entre estos recorridos es el orden en que se procesan los nodos. el orden es el siguiente ● Preorden: se procesa primero el nodo raíz. orden y postorden. Postorden: Se procesa primero el subárbol de la izquierda.uva.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. después la raíz y al final el subárbol de la derecha. 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. cada uno de los cuales es un árbol binario. 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. ● 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. Ejemplo: Entrada 9 428516397 485269731 Salida 124583679 Condiciones de ejecución. 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.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo. Página 5 de 70 . La primera linea contendrá el numero 1 ≤N≤500 que indica el numero de nodos del árbol. 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. 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.2. y una 'O' donde se encuentra la hermosa omitilda y una 'L' en aquellos lugares donde el campo este libre y puedas pasar. 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. por lo que tu tienes que llegar en el menor tiempo posible a ella. Ejemplo:  Entrada 558 XXXXX XCLLX XXXLX XOLLX XXXXX Salida 6 Condiciones de ejecución.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. 1. Las siguientes M líneas contendrán N caracteres que representaran el mapa.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo.. 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. 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. 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. pero el maligno pachus quiere matar a la princesa. Página 6 de 70 . Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo.3. 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.  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. pero.. 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 . 1.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. la primara contendra el nombre de nuestro nuevo presidente y la segunda la cantidad de votos con la cual gano.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. Página 7 de 70 . sin espacios y siempre en mayúsculas) Descripcion de la salida: Tu programa deberá escribir en la pantalla dos lineas. .*. El campo de 4 por 4 de la izquierda contiene dos minas. Ejemplo: Entrada 44 *..Examenes de Preselección para la IOI 2006 Problemas y Soluciones.. ... Los cuadros seguros se denotan con un ". . representadas por el caracter "*". Si representamos el mismo campo usando las pistas descritas arriba. Cada cuadro tiene a lo mucho ocho cuadros adyacentes. El objetivo del juego es el de encontrar dónde están localizadas todas las minas en un campo de M por N...... respectivamente.4.M <= 500) que significan el número de renglones y de columnas del campo." reemplazados por el número de minas adyacentes a ese cuadro. . Debe haber una línea en blanco entre las salidas de cada campo.. 1. terminamos con el campo de la derecha: *..... El juego muestra un número en un cuadro que te dice cuántas minas hay adyacentes a ese cuadro.. Cada una de las siguientes N líneas contiene exactamente M caracteres. Salida *100 2210 Página 8 de 70 . .*.. representando el campo.. 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. ." y los cuadros con minas con un "*".. *100 2210 1*10 1110 Descripcion de la entrada: La primera línea contendrá dos enteros N y M (0 < N. Descripcion de la salida: Tu programa deberá escribir Las N líneas que deben contener el campo con los caracteres ".Buscaminas (acm.uva. Por ejemplo.5}. {4. {2}.5.4. {6}.1}.4.5}. {1}.5. 1*10 1110 Condiciones de ejecución. {3. {3. {5}. si los números en el pizarrón fueran {6}. pero {5. Entrada 6 632145 13 45 Página 9 de 70 . {5} entonces una forma posible de reunirlos en un sólo grupo es: {6}.2.2. Descripcion de la entrada: En la primera línea habrá un entero N con 1 <= N <= 250000. {3}. los conjuntos {2}.2} y {2. Por ejemplo.2. 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.4} son grupos. Estos son los números en el orden en el que están escritos en el pizarrón.2..   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. {3}. {4}. {6}.5} no lo son.1.7. {4. {5}. En la segunda línea habrá N enteros positivos separados por un espacio.3. Un grupo es un conjunto de enteros que forma un intervalo.5} y {3.1}.1. 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. {6.5}. {4}. Al principio supondremos que cada uno de los números en el pizarrón forma un grupo por sí mismo.1}. Descripcion de la salida: La salida consiste de N-1 líneas. {6}. Cada una de estas líneas contiene dos enteros A y B.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.6. {2. 1. {3.4.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). Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo. {4}. Página 10 de 70 . 15 16 Salida 12 Condiciones de ejecución. Tu programa deberá ejecutarse en un tiempo máximo de 1 segundo.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Sudoku 2.El Coro de la Iglesia 2.Hotel Gobernador 2. 2....8..Otra vez sumas 2.Perro 2.Terremoto 2.-Problemas de Búsquedas 2.9.2.Burocracia Interminable 2..Tiempo Malgastado 2.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.10.1..7...3..4.5.Comesolo Página 11 de 70 ..Sokoban 2.6. Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 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. 2. ● ● Entrada La primera linea contiene un entero positivo: el número n de esquinas en la ciudad. llegar a alguna esquina específica. que representan las esquinas de la calle en la cual acaban de quitar escombro.. todas las calles quedaron bloqueadas por escombro y hay que atender a las víctimas(darle atención medica a algunos enfermos. La letra 'D' seguida de un espacio y luego los enteros a y b separados por un espacio. (Nótese que cada calle se puede recorrer en ambas direcciones) Pregunta. llevar proviciones etc).1. 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. 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. sin embargo. Las siguientes líneas contienen desbloqueos de calles y preguntas del encargado de llevar provisiones.Terremoto La Ciudad QuienSabeDónde ha sufrido de un terrible terremoto. Página 12 de 70 . al encargado le interesa saber si puede o no. Termine la ejecución del programa al finalizar la entrada. Los rescatistas han hecho un minucioso plan del orden en que irán removiendo el escombro de las calles. Cada línea contiene alguna de las siguientes opciones: Desbloqueo. afortunadamente no hubo bajas. por ello es necesario abrirse camino a traves del escombro. Ejemplo Entrada 5 P3 D24 D21 P4 P5 F Salida 0 1 0 Límites Puedes asumir que 1<=n<=10 000. Página 13 de 70 . 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. Indicador Final. La letra 'F' indicando el final de los datos de entrada. en el 80% de los casos n<=50. nunca habrá mas de 4 calles que conduzcan a una misma esquina y además.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. es decir. 2. 4+8=12. Por ejemplo. Página 14 de 70 . Un profesor de matematicas quiere probar que la prueba de la suma no prueba nada(valga tanta redundancia).-. 7+5=12. 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.2. debido a que la “prueba de la suma” lo que hace es sumar varios números y verificar su resultado.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. 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. como 4+8=12 la suma está bien. argumenta que para 22+35=75 la “prueba de la suma” dice que la operación se realizó correctamente 2+2=4. hasta obtener unos nuevos sumandos mas pequeños..Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 3+5=8. y luego de ello sumar los números resultantes. quiere saber de cuantas formas se puede expresar un número n como suma de 1 o mas números enteros positivos. entonces. Se trata de sumar los digitos de cada uno de los sumandos. 1+2+2. 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. pero para impresionar mas ha pedido de tu ayuda. de la misma forma que lo hace con el resultado 5+7=12. Escriba el resultado en salida estandar. ● Entrada Una única línea con un número entero: el número n. Página 15 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 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. 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. ● ● Cuente las formas para expresar ese número como suma de 1 o más enteros positivos. n-1. 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. . Tal no se ha percatado de que todo el tiempo que lleva tratando de acomodar los números. Tal ● Calcule cuántos minutos le tomó a Fulano D. 2. asi que opta por reacomodarlo en 1. 2. .-Tiempo Malgastado Fulano D. 2.. Luego decide que ese acomodo no le gusta.. . osea 1. 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. que representa el tamaño de la secuencia de Página 16 de 70 . Despues de mirar un rato nuevamente el acomodo de los números vuelve a concluir que no le gusta el nuevo acomodo.. 3.. 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. Fulana D.. Problema Debes hacer un programa que: ● Lea de entrada estandar el acomodo actual de Fulano D. Tal a hacer ver a su esposo exactamente cuánto tiempo lleva reacomodando números. y asi sucesivamente hasta el n-esimo número. n. Tal iría eligiendo conforme se decide: 1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 .. Ayuda a Fulana D.3. Para n=4 estos serian los acomodos que Fulano D. Todo esto siempre y cuando el orden al que se llegó no se haya elegido anteriormente. su esposa. 3. Tal tiene n números que quiere acomodar pero se muestra indeciso en cuanto al orden. n. asi que opta primero por poner los números en orden ascendente. y asi. 4312 4321 Luego de un rato Fulano D.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. . Tal. se ha dado cuenta que tarda un minuto en acomodar los números en un nuevo órden. Ejemplo Entrada 4 2314 Salida 9 Límites Puedes asumir que Fulano D. Página 17 de 70 . 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. en el 80% de los casos n<=10. Tal buscando la manera de acomodar los números. Tal Salida Tu programa deberá escribir un unico entero en una sola línea: el número de minutos que lleva Fulano D. Tal. además.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 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 cuales tienes que hablar para que te vuelvan a mandar con la persona 1(incluyendo a la persona 1). en el 80% de los casos n<=20 y m<=80 Página 21 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Ejemplo Entrada 45 12 23 31 24 43 Salida 3 Límites Puedes asumir que siempre 1<=n<=100. además. El hotel está dividido en m x n modulos cuadrados. Encuentré qué pared quitar para formar un nuevo cuarto lo mas grande posible. Entrada Página 22 de 70 .= No pared -> = Esto muestra donde quitar la pared de acuerdo al caso de ejemplo.6. 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 . hotel.c.. Escriba el resultado en salida estandar. hotel.pas. Calcule el tamaño del cuarto mas grande. 2. Calcule cuantos cuartos tiene.)).Examenes de Preselección para la IOI 2006 Problemas y Soluciones.cpp) 1 2 3 4 1 2 3 4 5 6 7 ############################# # | # | # | | # #####---#####---#---#####---# # # | # # # # # #---#####---#####---#####---# # | | # # # # # #---#########---#####---#---# # -># | | | | # # ############################# # = Pared | = No pared . Problema Debes hacer un programa que: ● ● ● ● ● Lea el mapa de un hotel desde la entrada estanda.Hotel Gobernador (IOI) (hotel. Cada modulo puede tener entre 0 y 4 paredes. sur. 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. El mapa estara representado en forma de números. 1) estará tambien indicada como una pared en el norte del modulo (2. uno por cada módulo ● ● La primera línea contendrá 2 enteros: n y m. 'S'. 1). En las siguientes n lineas los módulos de cada fila serán descritos por m números enteros p. 8=pared al sur. Que representan el número de filas y columnas en el mapa del hotel respectivamente. Este número es la suma de: 1=pared al oeste. b representa la columna de un modulo adjacente con tal pared. 4=pared al este. a representa la fila donde se encuentra la pared que hay que derribar para conseguir el cuarto mas grande posible. b y un caracter c separados por espacios. Las paredes interiores serán definidas tambien. este y oeste 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 . c puede ser 'N'. c representa el lado del módulo en el que se encuentra la pared. 'E' u 'O' que representan norte.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 0<=p<=15. 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. 2=pared al norte. una pared en el sur del módulo (1. Límites Puedes asumir que 1<=n. m<=50. n<=10. en el 60% de los casos m. Además.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. El hotel siempre tendrá a lo menos 2 cuartos. Página 24 de 70 . Problema Debes hacer un programa que: ● ● Lea los datos del grupo de coristas desde entrada estandar. el número de coristas.pas. Encuentre de qué manera dividirlos en dos grupos para que la sumatoria de las intensidades de cada grupo sean iguales. Escriba los grupos resultantes en salida estandar. La segunda línea contendrá n enteros.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. ● Entrada La primera línea contendrá un solo entero n. y la suma de las intensidades de las personas que estan a la izquierda dan como resultado la intensidad izquierda. entonces llaman mucho la atención los de la izquierda. 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. Página 25 de 70 . la suma de todas las intensidades de las personas que estan a la derecha da como resultado la intensidad derecha. coro. si los de la derecha cantan mas fuerte. uno a la izquierda y otro a la derecha. coro. Salida Deberá ser una sola línea con n enteros. el objetivo es que canten con la misma intensidad ambas partes del coro para que toda la atención esté al frente.El Coro de la Iglesia (coro..7. si las voces de la izquierda se oyen mas fuerte que los de la derecha. Si hay varias soluciones cualquiera será aceptada.cpp) En una Iglesia hay n personas en el coro numeradas del 1 a la n y hay 2 lugares disponibles para el coro.c. 2. llaman la atención los de la derecha. Cada cantante tiene una intensidad que puede ir desde 1 hasta 100. el i-esimo entero representará la intensidad con la que canta el corista número i. Página 26 de 70 . Se garantiza que siempre habrá una forma posible de acomodar a los coristas con las condiciones antes mencionadas. Ejemplo Entrada 6 10 5 5 2 4 2 Salida 100010 Límites Puedes asumir que siempre n<=30 y además.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. en el 70% de los casos n<=10. 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.8. Así que se sienten irresistiblemente ansiosos de estar lo más cerca de ella posible todo el tiempo.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. perro. para saber en qué bares se encuentran Greg y Stef. Problema Escribe un programa que: ● ● Lea la configuración del pueblo desde entrada estandar. Como a Miranda no le cae bien ninguno de los dos. Miranda. las esquinas estan numeradas del 1 a la n y las calles se pueden recorrer en ambos sentidos.pas. 2. Miranda conoce a todas las meseras que atienden los bares del pueblo y les ha preguntado por telefono. Escriba el resultado en salida estandar. Las esquinas de la ciudad. por ello hay algunas calles por las que no pueden pasar Greg y Stef porque solo puede pasar la aristocracia. 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. ellos fueron a dos diferentes bares cada uno.Y las calles se representan como las aristas de este grafo.c. se representan como vértices del grafo.cpp) Greg y Stef estan ambos perdidamente enamorados de su compañera de clase. Paradógicamente Miranda va a pié. asi que el tiempo en que cada uno de ellos se tarda en ir de una esquina a otra es insignificante.Perro (Inspirado en Nevenka Croatian Olympiad in Informatics 2004) (perro. incluyendo el Domingo por la mañana cuando ella va a la Iglesia. El pueblo donde ellos viven tiene discriminación. El pueblo donde ellos viven puede ser representado por un Grafo Conexo no direccionado. 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. El pueblo tiene n esquinas. como toda aristócrata si puede pasar por ahí.. pero Greg y Stef tienen carro. perro. la casa de Miranda. pero Miranda. Un cierto domingo. Página 27 de 70 ● . donde x e y son las esquinas que conecta la calle y c qué clase de calle es. Las siguientes m líneas describirán cada una de las calles. cada línea contendrá 3 enteros. Salida La primera línea deberá contener un único entero: la longitud del camino mas corto que debe recorrer Miranda. c y d. Ejemplo Entrada 78 1743 120 321 241 270 540 761 651 151 Salida 3 Página 28 de 70 . Si z=1 Greg y Stef pueden pasar por ahí. 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. x. Si no existe tal camino tu programa deberá de escribir -1. b. b representa la esquina donde se encuentra la iglesia que a Miranda le gusta visitar. La segunda linea contendrá 4 enteros a.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Donde a representa la esquina donde se encuentra la casa de Miranda. de lo contrario solamente Miranda puede recorrer la calle. Entrada En la primera linea se encontrán 2 números enteros n y m. y y z. que son el número de esquinas y calles de la ciudad respectivamente. Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Página 29 de 70 . Límites Puedes asumir que 4<=n<=300 y además. en el 70% de los casos n<=50 y m<=200. Solo puede empujarla y no tiene suficientes fuerzas para tirar de ella. Cuando en un movimiento no empuja la caja.pas. Considera un juego de sokoban en el cual el obrero debe empujar una caja a traves de un cuarto hacia una ubicación determinada. Problema Debes hacer un programa que: ● ● Lea el mapa de el cuarto desde entrada estandar. NUNCA en diagonal. sokoban. cajas sobre marcas en el suelo. Encuentre una secuencia de movimientos lo mas corta posible para que el obrero empuje la caja hasta la ubicación dada. el obrero puede moverse una casilla al norte. o en muchas versiones. El acto de empujar la caja se ejerce cuando el obrero estando en una casilla adyacente a la caja la empuja.cpp. sokoban. ● Página 30 de 70 . pasando el obrero a ocupar la casilla que antes ocupaba la caja y ésta la casilla vecina a la que ocupaba originalmente. 2. este u oeste. Por si no fuera asi. 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).9. sur.-Sokoban (CIIC) (sokoban. Escriba el resultado en salida estandar. El obrero sólo puede empujar la caja desde una casilla vecina horizontal o verticalmente.c) Seguramente ya conoces el clasico juego de Sokoban.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. De igual manera. El cuarto está representado por una cuadricula de 5 x 5 rodeada de una pared perimetral. se trata de que el obrero empuje los rubies que se muestran en la figura para ponerlos sobre los circulos verdes. el obrero solo puede empujar la caja si la caja pasa a ocupar un lugar en el cual no se encuentra una pared. siendo n el tamaño de la secuencia de pasos para colocar la caja en el lugar de destino. Los pasillos por donde el obrero y la caja pueden transitar se representan por un punto (caracter ASCII 46)... La segunda línea deberá contener n caracteres separados por espacios.. que indican los movimientos del obrero desde el inicio hasta que coloca 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. E u O.X X. S. Los caracteres X indican paredes. cada una de 7 caracteres dando el mapa del laberinto.X X. Salida La primera linea deberá contener de un solo entero n...XXXX X.. el caracter O(O. el caracter C la ubicación de la caja.O.DX X... y el caracter D el lugar de destino de la caja. un movimiento al sur.. Nótese que en cada movimiento el obrero solo se mueve una casilla.X XXXXXXX Salida 11 OSONNNONEEE Página 31 de 70 .. no cero) indica la ubicación del obrero. que representan un movimiento al norte.C. Ejemplo Entrada XXXXXXX X..Examenes de Preselección para la IOI 2006 Problemas y Soluciones.. Entrada La entrada constará de 7 líneas. un movimiento al este y un movimiento al oeste respectivamente. columna j del mapa del cuarto. Dichos caracteres pueden ser N. Sea a la longitud de la secuencia mas corta que resuelva el caso de prueba. En total habrá 10 casos de prueba para este problema. si tu salida resuelve el caso de prueba. Límites y Forma de Evaluar Se garantiza que todas las entradas tienen solución.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 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. obtendrás la parte entera de (a/n)*3 puntos en ese caso de prueba unicamente. Página 32 de 70 . Deberás de mandar todos los archivos de salida que puedas producir en un archivo zip.in. .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. comesolo2.out.gz. . entonces contendrá una ficha. Escribe un programa que dado el tamaño del tablero y la ubicación de cada una de las fichas.in. elmine tantas fichas como pueda.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. Tu trabajo es producir los archivos de salida comesolo1. comesolo2. comesolo20.out.in. Salida La primera línea de la salida debe contener el número m de fichas eliminadas. 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.. esto significa que podras bajar los casos de prueba comesolo1.tar. 2. cada ficha puede tener hasta 8 fichas vecinas. Página 33 de 70 . sino es 0. comesolo. Entrada La primera línea del archivo contiene un solo entero: el número n.. 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. Dos fichas son vecinas si las casilla que ocupen tienen algún vertice en común. conteniendo todos los archivos de salida sin subdirectorios. . es decir.-Comesolo (comesolo.tar. Las siguientes n líneas del archivo contienen n enteros separados por espacios. La ficha sobre la que se brincó se elimina del tablero. o tar-gzip... comesolo10.out.10. comesolo. Problema Este es un problema de solo salida.zip.. comesolo. Página 34 de 70 . además. b es la columna de la ficha que se mueve antes de realizar el movimiento. donde o es el máximo número de fichas que se sepa se pueden eliminar. donde a es la fila de la ficha que se mueve antes de realizar el movimiento. Ejemplo Entrada 3 000 011 000 Salida 1 2321 Pendiente Límites y Forma de Evaluar Para todos los casos n<=30. c. d cada una separados por espacios.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. b. Para cada caso de prueba se otorgarán los puntos correspondientes a la parte entera de (3m)/o. 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. Las siguientes M líneas deben contener cuatro enteros a. Cada línea representa el movimiento de una ficha. Desconectando al Enemigo 3..La Tecnica de la Indiferencia Página 35 de 70 .. 3.1.3..4.Problemas de Algoritmos Glotones o Divide y Venceras 3..Examenes de Preselección para la IOI 2006 Problemas y Soluciones.K-Ceros 3.El Ladrón y la Mochila 3.5..2.Cuenta Burbujas 3.. el donde el i-ésimo entero representará el costo de cada moneda de tipo i. 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. ● Escriba el resultado en salida estandar. mochila. 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. Entrada La primera línea contendrá 2 enteros separados por un espacio: m y k.1. La segunda línea contendrá m enteros separados por espacios. 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. 3. ● Calcule los montos máximo y minimo que pudieron haber sido robados. 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. Problema Debes hacer un programa que: ● Lea los datos de las monedas y la mochila desde entrada estandar. 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. mochila.pas) Tiempo límite: 1 segundo Una noche un ladrón entró clandestinamente a una tienda de monedas para coleccionistas. Los tipos de monedas estan números del 1 a m. Ejemplo Entrada Página 36 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones..El Ladrón y la Mochila (mochila.c. Examenes de Preselección para la IOI 2006 Problemas y Soluciones. además. Se garantiza que el monto maximo nunca sera mayor a 1073741824. en el 60% de los casos m<=100 y k<=1000. Página 37 de 70 . 5 12 23487 Salida 96 Límites Puedes asumir que para todos los casos m<=10 000 y k<=1 000 000. 3. 4!=24. 4! tiene 0 ceros a la derecha. kceros. 5! tiene un cero a la derecha. 15! tiene 3 ceros a la derecha 13!=6227020800. el número m..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. 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. Por ejemplo: ● ● ● ● 5!=120. ● Escriba el resultado en salida estandar Entrada La primera y única linea contendrá un solo entero. Salida Página 38 de 70 . 15!=1307674368000.K-Ceros (kceros. kceros.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.c.cpp.2. en el 60% de los casos m<=200 000. 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. La primer y única línea deberá contener un solo entero. Página 39 de 70 . el número k. además. fin.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.. fin. 3.Cuenta Burbujas (CEOI) (burbuja. fin.c. i+1). ● Calcule cuántas veces se llama la función “intercambia” para la secuencia dada con el algoritmo de burbuja.3. ● Escriba el resultado en salida estandar Entrada La primera línea contendrá un entero n que representa el tamaño de la secuencia. Problema Debes hacer un programa que: ● Lea una secuencia de números desde entrada estandar. 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. La segunda línea contendrá una secuencia s de n enteros separados por espacios.cpp. Salida La primera y única línea debera contener un solo entero: el número de intercambios que el Página 40 de 70 . burbuja. burbuja.pas) Tiempo límite: 1 segundo Un algoritmo de ordenamiento muy popular entre los principiantes es Burbuja. Ejemplo Entrada 5 23 99 42 25 50 Salida 4 Límites Para todos los casos n<=50000 y además. algoritmo de burbuja realiza. en el 60% de los casos n<=1000 Página 41 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. cpp. que representan una línea de comunicación entre los puntos a y b. es decir. de esa manera el mensaje puede llegar de cualquier punto de comunicación a cualquier otro. Cada línea de comunicación une a exactamente 2 puntos de comunicación. uno o mas puntos de comunicación conectados uno tras otro.(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). Problema Debes hacer un programa que: ● Lea de entrada estandar la configuración de las comunicaciones de la red de crimen organizado.pas) Tiempo límite: 2 segundos La policía pretende desmantelar una red de crimen organizado. desconectando. Para pasarse mensajes entre 2 puntos de comunicación que no estan conectados siempre tienen intermediarios.. Página 42 de 70 . Cada una de las siguientes n-1 líneas contendrá 2 enteros a y b. desconectando.Desconectando al Enemigo (desconectando. ● Encuentre el menor número de puntos de comunicación que se necesitan neutralizar para que no haya par de puntos comunicados. el primero conectado con el remitente y el último conectado con el destinatario.c. esta red tiene n puntos de comunicación numerados de 1 a n y n-1 líneas de comunicación.(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. 3. ● Escriba el resultado en salida estandar Entrada La primera línea contendrá un unico entero: el número n.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. 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. para evitar que huyan ha diseñado una estrategia basada en mandar espías para que dejen inservibles ciertos puntos de comunicación.4. Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Página 43 de 70 . Límites Puedes asumir que n<=100 000. 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. además en el 50% de los casos n<=50. la guía se va por el que tiene mayor grado de indiferencia.cpp. Es decir.pas) Tiempo límite: 2 segundos. 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. b). m) se define como |x-m|+|y-n|. Cierto día a las 6n² guías se les ocurrió pararse sobre una cuadricula de 2n filas x 3n columnas. NOTA: Los nombres y situaciones descritos en este problema son mera ficción.5. ● Determine el número de guías que se fueron con cada competidor. Tu quieres determinar cuántas guías se fueron con cada quién sabiendo n. C en la casilla (c. Un competidor. 1). que se llamaba A(¿qué buen nombre verdad?) otro se llamaba B. Problema Debes hacer un programa que: ● Lea los datos de las posiciones de los competidores asi como el tamaño de la cuadricula. y C es mas indiferente que D. a. y cualquier parecido con nombres o situaciones reales es pura coincidencia.La Tecnica de la Indiferencia (indiferencia. ello quiere decir que si dos competidores estan igualmente lejos de una guía. b. 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. Página 44 de 70 . B decidió colocarse en una casilla sobre la primera columna. C por su parte se situó en una casilla de la ultima fila y D se situó en una casilla de la ultima columna. 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. A es mas indiferente que B. indiferencia. c y d.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. una guía en cada casilla de la cuadricula. x) y (n. Es decir A se situó en la casilla (a. La distancia entre dos casillas de la cuadricula (y. d). 2n) y D se situó en la casilla (3n. aquel competidor que tenía mas lejos y que por lo tanto le manda mas indiferencia a ella. Mientras las guías estaban paradas sobre la cuadricula A decidió colocarse en una casilla de la cuadricula sobre la primera fila.. B en la casilla (1. 3. indiferencia. otro se llamaba C y un ultimo se llamaba D.c. ● Escriba el resultado en salida estandar. B es mas indiferente que C. y cuántas con D respectivamente. Ejemplo Entrada 39554 Salida 25 21 0 8 Límites Puedes asumir que para todos los casos n<=1 000 000. Salida Una sola línea con 4 números enteros representando cuántas guías se fueron con A. cuántas con B. en el 50% de los casos n<=5 000. a. b. Página 45 de 70 . además. 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. cuántas con C. c y d. Soluciones Página 46 de 70 .Examenes de Preselección para la IOI 2006 Problemas y Soluciones. El siguiente árbol muestra las deducciones que se pueden hacer conforme a los dos recorridos: En este caso.Árboles Modelo a utilizar Sabemos que existe un árbol binario. el recorriedo en orden visita la rama izquierda. 1. a cualquier nodo que se pueda llegar partiendo de X si solo se recorren aristas que conducen a niveles superiores. mas no sabemos el árbol. Observaciones Consideremos dos nodos cualesquiera.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. luego la rama derecha y finalmente el nodo actual. los dos nos revelan el árbol si eliminamos posibilidades. Uno solo de los recorridos no dice mucho. si A aparece antes que B en orden.. significa que A está a la izquierda o es padre de B. luego visita el nodo actual y finalmente la rama derecha.. significa que A es hijo de B o A está a la izquierda de B. Simplemente se conocen 2 recorridos: Orden y Postorden. El recorrido en postorden visita primero la rama izquierda. Los dos recorridos funcionan de manera recursiva. Página 47 de 70 .1. Dados los recorridos en orden y postorden deseamos conocer el árbol o conocer el recorrido en preorden. Si A aparece antes que B en postorden. entiendase como padre de un nodo X. pero en ordenes diferentes.Soluciones a los Problemas de Estructuras de Datos 1. A y B. pero en conjunto. sino Insertar(nodo->hijo_derecho. esto se pueda hacer de manera recursiva: 1 2 3 4 5 6 7 8 Función Insertar(nodo. 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. 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). Una vez construido el árbol ya no es problema alguno hacer el recorrido en preorden. nuevo_valor) si no_existe(nodo) asignar_valor(de nuevo_valor a nodo).Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Página 48 de 70 . De esa forma. nuevo_valor). sino si precede_en_orden(nodo a nuevo_valor) Insertar(nodo->hijo_izquierdo. Otra observación que vale la pena hacer notar es que el último nodo del recorrido en postorden es la raíz del arbol. nuevo_valor). Asi que solamente hay que saber donde insertarlo. sabemos que no es posible probar todos los caminos. 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. Esta solución es O(NlogN) y funciona para el 100% de los casos. pero además. Luego se entra en un ciclo en el cual se saca un nodo de la cola. hay que conocer todos los puntos a los que se puede llegar con caminos mas cortos que este. Observaciones Para conocer el camino mas corto para llegar al destino. 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. se debe de tener una cola. y al Página 49 de 70 . En la cola inicialmente se mete la posición de partida y se marca la posición de partida como 0. 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. por ello. Solución 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. 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.2. determinar el menor número de cuadros que contiene el camino mas corto entre 2 puntos dados. Definición del Modelo y el Espacio de Búsqueda La cantidad de caminos entre dos puntos dados es exponencial.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Luego. 1. se comprueba si es el nodo de destino. 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. entonces ese valor será el camino mas corto. Se vuelve a recorrer el arreglo.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. 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. Solo es necesario saber la longitud del camino mas corto. Puede haber 26^6 nombres de 6 caracteres. Este algoritmo es O(NM). Se repite el proceso anterior hasta que se saque de la cola la posición final. El problema con este algoritmo es que cada inserción requiere de logN comparaciones de cadenas de caracteres.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. No es posible hacer un árbol completo con todos los nombres por razones ya explicadas anteriormente. Esta solución es O(NlogN) en caso promedio con un bucle interno grande. con mayusculas y sin espacios. Asi que para sustituir eso es posible usar un árbol binario de búsqueda. Asi que tenemos un total de 26^6+26^5+26^4+23^3+26^2+26=321272406 nombres posibles. 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. Una solución para esto es equilibrar el árbol. y es O(N²) en el Página 50 de 70 . y una comparación entre 2 cadenas de 6 caracteres requiere en el caso medio 3 comparaciones de un byte...Elecciones Definición del Espacio de Búsqueda Tenemos a lo mas 500 000 cadenas de 6 caracteres.3. 26^5 nombres de 5 caracteres. Otro inconveniente es el de equilibrar los árboles. 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. tener un árbol para nombres que empiezen con cada letra del abecedario. Pero hacer 26²=676 árboles ya es un poco mas razonable. El problema del desequilibrio puede apaciguarse con tablas de disperción. un árbol para nombres que empiezen con cada pareja de letras del abecedario. y si es posible. 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. es decir.. sin embargo equilibrar árboles es una tarea muy costosa de implementar y tambien toma un poco de tiempo de ejecución. 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. mismo tiempo estas casillas se meten a la cola.. 1. y queremos saber cual tiene mas incidencia. 26^1 nombres de un caracter. Buscaminas Solución 1 Simplemente tener un arreglo con el numero de minas adjacentes. Ello requiere una resta y a lo mas 6 sumas y 6 multiplicaciones por palabra. 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. El resto solamente es decodificar el número para obtener la palabra. esto se puede lograr si tomamos la palabra como un número de 6 dígitos en base 27. contar las minas adjacentes a tal casilla 1. forzosamente se tiene que fucionar con el grupo que contenga a la x-1. recorrer el arreglo de entrada y al encontrar una mina incrementar las casillas vecinas en el arreglo de minas adjacentes. Ya que se tiene la secuencia de números. Asi que la primera letra de la palabra es el sexto dígito de derecha a izquierda en nuestro número que estamos generando. para x diferente de 1. y si su número Página 51 de 70 .. donde 'A'=1 y el fin de la cadena es igual a 0. Luego simplemente hay que cambiar el número de base heptavigecimal a base decimal. 1. un grupo cuyo número menor es x. 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)). Solución 2 Recorrer el arreglo de entrada y cada que se encuentre una casilla sin mina. Esta solución es de O(NlogN) en todos los casos.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. De esa forma cada nombre se puede expresar con un número del 0 al 27^6=387420489.Y como cada número aparece solo una vez en la secuencia.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. lo cual se hace en O(1). 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. peor caso.4. Solución 2 – Ordenamiento Para evitar hacer varias comparaciones de un byte es posible convertir cada letra en un número. forzosamente se tiene que fusionar al grupo que contenga a y+1. como son muchos números en la lista. Asi que es mejor tener una lista doblemente enlazada de grupos. Sin embargo. Página 52 de 70 . mayor es y. tenemos un algoritmo que si en cada recorrido cada grupo se fusiona con otro. si un grupo A se puede fusionar con un grupo B pero se fusiona con C. y el grupo resultante se todavía se podrá fusionar con el que contenga a la x-1.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Como resultado. el grupo resultante todavia se podrá fusionar con B. 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). su tiempo de ejecución es O(NlogN). 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. En resumen. 2. en el cual cada nodo representa a una esquina. 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 . 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. Por ello la complejidad de esto es O(MN). ya que al llegar a cada nodo se pueden elegir en el peor caso entre 3 aristas mas para continuar con la busqueda. A}.Terremoto Estructura de la Solución ¿Qué es lo que se está pidiendo? La ciudad puede ser representada por un grafo.1. Así que formalmente esto es lo que se pide: Dado un grafo no dirigido G={V. inicialmente con 0 elementos en el conjunto A. Como solo es necesario saber si se puede llegar a cada nodo o no se puede solo es necesario visitar cada nodo una vez. porque tampoco hay restriccion para eso). conforme se vayan añadiendo las aristas saber qué nodos son conexos con el nodo 1. (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).. 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. cada que la entrada haga una pregunta. 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).Soluciones a los Problemas de Búsquedas 2. es decir.. y cada arista representa a una calle. 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.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Esta fue la solución pensada para dar el 80% de los puntos. Solución 1 – Exhastiva Una manera de resolver el problema es. Lo que se quiere saber es si hay por lo menos un camino para ir desde el nodo 1 a algún otro nodo. si el nodo 1 es conexo con algun otro nodo. se hace una busqueda desde el nodo que no se podía llegar y se marcan como conexos a todos los nodos visitados. 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. Inicialmente todos los nodos se consideran padres de si mismos. no importa realmente el acomodo de las aristas. al principio se puede llegar al nodo 1.2. sin embargo tambien podía dar 100 puntos. Suena un poco compliado este metodo pero es el mas cómodo de implementar. Página 54 de 70 . para añadir una arista en el grafo entre dos nodos a. por ello. Ello quiere decir que en el peor caso son NlogN operaciones por preguntas y MlogN operaciones por añadir aristas. solo hay que buscar la raiz de dicho arbol. ya que en éste tipo de árboles cada nodo tiene una sola arista. En el momento que se haga una pregunta simplemente se dice si está marcado o no como conexo. en caso de que asi sea. para saber si 2 nodos estan en el mismo árbol. Así que la complejidad total es O((M+N)logN). Solución 4 – Unión-Pertenencia Esta solución es menos eficiente que la solución 3 y no está basada en búsquedas. Y comparar ambas raices. 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. Si se mira bien el problema. 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. sino las componentes conexas(los conjuntos de vertices en los cuales todos sus nodos son conexos entre sí). la cual apunta a su padre. En esta solución cada nodo solo se visita una vez. y cada arista se añade en tiempo constante.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. que se puede llegar y nunca borrarlo. Cada componente conexa se puede representar como un árbol. 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.. .Backtracking Una forma que quizá se puede ocurrir al instante es probar todos los conjuntos posibles. El todo es menor que 1. Solución 2 – Recursión con Memoria Página 55 de 70 . Solución 1. La complejidad de esta solución es dificil de definir a ciencia cierta. fin. ya que eso garantiza que nunca se probaran 2 veces una permutación de los mismos números.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. si(suma>N) => regresa. 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. fin. probar todos los conjuntos de números posibles es equivalente a probar todas las secuencias ordenadas de números. ¿cómo hacer esto?. Y cada que se llama a la función recursiva.˙. suma+i). Así. ultimo) inicio si (suma==N) => inicio contador++. 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. no existe forma alguna para esos casos. luego todas las que empiezen con 2 y asi sucesivamente ir contando aquellas secuencias que sumen n. puesto que el menor entero positivo es 1 y con los números enteros positivos el todo siempre es mayor que sus partes. El siguiente pseudocodigo resuelve el problema para el 80% de los casos: 1. fin. ésta se debe de llamar con números mayores o iguales al ultimo número colocado en la secuencia. pero basta con hacer algunos casos de prueba a mano para darse cuenta que no funciona en tiempo para números mayores que 100. regresa. para i=ultimo -> N-suma hacer inicio funcion(i. Tambien hay que tomar en cuenta que los casos en los que n<=0 deben producir de salida 0. funcion(suma. el backtracking sería probar de manera recursiva primero todas las que empiezen con 1. +sumas(i-i. 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. en lugar de llevar un contador con la sumatoria de todos los anteriores es posible llevar un contador que diga cuánto falta sumarle. por ello hay n²/2 parametros posibles. Solución 3 – Programación Dinamica De la misma complejidad que la recursión con memoria es posible. De esta forma funcion(a. i) sumas(0. Y al encontrar la permutación de entrada. Cambiando un poco el enfoque del algoritmo 1 . pero nótese que se puede llegar a llamar varias veces a la función con los mismos parametros. 2. por ello la complejidad de este algoritmo es O(N³). Pero ya que no es un N³ completo sino que tiene muchas podas. Y para calcular cada uno de ellos hay que recorrer un bucle de longitud (n-a)-a=n-2a. x)=1 para toda x que pertenezca a los números enteros Donde sumas(i.. (j+1))+. El parametro a puede variar entre 0 y n igual que el parametro b. El órden lexicográfico está explicado en el problema mismo. ya que i=0 indica que se terminó de contar. j)=sumas(i-j. 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. a excepción de cuando i=0. 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.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.3 Tiempo Malgastado Estructura de la solución ¿Qué es lo que está pidiendo? Dada una permutación.. este algoritmo funciona para el 100% de los casos. decir que número de permutación es en orden ascendente lexicograficamente. lo cual es una expresión lineal. b) devolvería el núemero de formas de sumar a como suma de 1 o mas enteros mayores o iguales que b. Hasta ahora no se ha disminuido la complejidad del problema. al mismo tiempo que se van contando las permutaciones generadas. simplemente escribir cuantas permutaciones se Página 56 de 70 . j)+sumas(i-(j+1). 1 y dijimos que n! contaba el número de ellas. 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. Por ello. luego las 6 que comienzan con 3 y finalmente las 6 que comienzan con 4. suele ser suficiente una busqueda exhastiva con podas muy agresivas. “Una Breve Introducción a la Recursión”. la complejidad de esta solución es O(n!). sin embargo. 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. Es decir. en {1. generaron para llegar a ella. Si observas bien.” Además ofrece un código en C y otro en Pascal donde genera permutaciones lexicográficamente. podemos saber que en un conjunto de n números. esto implica. En general. 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. Por ejemplo. 2. y asi sucesivamente. luego las 6 que comienzan con 2. 3 y 4 se pueden obtener de la siguiente forma: primero escribamos las 3! = 6 permutaciones que comienzan con 1. 4} hay 3! permutaciones que empiezan con 1. 2. simplemente hay que contar cuántas veces cambió el primer número para llegar a su estado actual. 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. Pero. si se considera que se estuvieran generando lexicograficamente las permutaciones. Si alguien quiere verlo aún sigue en la sección de material de estudio. cuantas veces cambió el segundo número luego de que el primer número se encontraba en su estado actual. cuando la solución es unica. Esto se puede hacer facilmente en O(n²) 2. 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. en cada columna y en cada región cada número debe aparecer una y solo una vez.4 Sudoku Existen muchas formas de resolver el Sudoku. Solución 2 Volviendo a mencionar que un conjunto de n números tiene n! permutaciones. y de n-1 números tiene (n-1)! permutaciones.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Si fueron atentos. si las necesitaramos ¿cómo las generaríamos? Para darnos una idea. notarás que las 24 permutaciones de los cuatro números 1. demos un vistazo a las 4! = 24 permutaciones de los números 1. 3. 2. Se sabe que en cada fila. Dado que hay n! permutaciones para n elementos. etc. 3! permutaciones que empiezan con 2. en la sección de material de estudio. y esta pensada para ser una solución para el 80% de los casos. Para solucionar esto. la poda aplicada antes de la búsqueda se puede aplicar luego de añadir un número arbitrariamente a la cuadricula. Página 58 de 70 . Solución 2 – Busqueda en Amplitud Considérese el ciclo mas corto. habrá que regresar al estado anterior a colocar aquel número. 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. simplemente hay que encontrar el camino mas corto que inicie en un nodo que esté a distancia 1 del nodo 1. Asi que cambiando un poco la tarea. De igual forma. sin embargo hay que tener cuidado. cada casilla debe tener un número. encontrar el ciclo mas corto que contenga a un nodo etiquetado como 1. Esta solución es O(N!) y el 80% de los casos estan hechos para funcionar sin problemas con esta solución. una busqueda ligeramente podada 70% y una búsqueda con todas las podas mencionadas 100%. eso quiere decir que si solo un número puede ir en ella. Otro problema es que por mas que se pode al principio. forzosamente ese número tiene que ir ahí. que contenga al nodo 1. 2. nótese que el ciclo contiene una arista que apunta desde el nodo 1 y otra arista que apunta al nodo 1.5 Burocracia interminable Solución ¿Qué nos estan pidiendo? Dado un grafo dirigido. Si se borra la arista que apunta desde el nodo 1 tendremos un camino. (Con tan solo 15 casillas que queden vacias el programa tendría que probar una cantidad muy grande de casos). Una busqueda exhastiva recibía 50% del puntaje. Esta poda es muy poderosa. y que termine en el nodo 1. columna o región. ya que si se coloca un número equivocado.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. forzosamente ese número se encontrará en aquella casilla. y el número de pasos requeridos para encontrar la solución es exponencial. y en ciertas ocaciones con solo hacer esto se resuelve el sudoku sin necesidad de hacer la busqueda(no siempre). de una fila. es muy propenso a que queden varias casillas vacías. por ello hay que ir guardando en qué orden se fueron colocando los números para posteriormente borrarlos en caso de que sea necesario. Haciendo esto antes de comenzar la busqueda ahorra trabajo. y cada que un modulo sea coloreado. luego se colorean todos los modulos conectados con este haciendo una búsqueda. 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. simplemente hay que repetir esta operación hasta que todos los módulos esten coloreados.Hotel Gobernador Estructura de la Solución Dado un hotel. Solución El área de un cuarto es el número de modulos que contiene. colorearlo del siguiente color y buscar los módulos conectados con él. Ya sabiendo el número de cuartos. Continuando con el color 2 se colorea cualquier módulo que no haya sido coloreado y todos los módulos conectados con él. Página 59 de 70 . y de ser así. y el area de cada uno de ellos. la mas recomendada es tener un arreglo con las áreas de cada color. 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. 2. Para hacer esto es necesario recorrer todos los modulos del castillo. y qué pared tenemos que quitar para conseguir un cuarto lo mas grande posible. y por cada módulo sin colorear que se encuentro. Hay muchas maneras de determinar el área de los cuartos. cualquiera es buena). es un máximo conjunto de módulos conectados. verificar la suma de las áreas de los cuartos que poseen esos colores. Dos modulos podemos decir que estan conectados si y solo si no hay pared entre ellos. Un bueno y conocido algortmo para determinar los cuartos está basado en colorear los modulos. se pueden meter inicialmente a la cola todos los nodos a los que apunta el nodo 1. se nos pide que determinemos el número de cuartos. Esta solución es de O(NM) y funciona para todos los casos. Para hacer eso. Luego. Nótese que cada pared conecta a lo mas a 2 cuartos. Se empieza coloreando con el color 1 una esquina del hotel. Esta solucón es O(N) y funciona en el 100% de los casos. 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. Un cuarto. el área del cuarto mas grande. y luego de eso una busqueda en amplitud.(ya sea amplitud o profundidad.6. aumentar el área en el arreglo.. usando un color diferente para cada cuarto(cada color se puede representar como un número).Examenes de Preselección para la IOI 2006 Problemas y Soluciones. la original fue escrita por Tom Verhoeff. Solución 2 – Programación Dinamica(Knapsack) Este es una variante del clásico problema de la mochila o knapsack. es posible reducir el problema. y por supuesto..-El Coro de la Iglesia Estructura de la Solución Dado un conjunto de números. B. Otra poda factible es de paridad. buscar a partir de los “pequeños” y por cada retroceso de los “pequeños” buscar a partir de los “grandes”. Solución 1.Backtracking Como la suma de las sumatorias de los 2 conjuntos dan como resultado la sumatoria del conjunto de entrada. C y D.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.Perro Estructura de la solución Dado un grafo G={V. E}. esa poda no sería suficiente. hay que dividirlo en 2 subconjuntos tales que la sumatoria de uno sea igual a la del otro. ya no es necesario seguir buscando. y F tal que F sea un subconjunto de E. no es posible probar todos los subconjuntos posibles(hay aproximadamente mil millones de subconjuntos).8. Como ambos conjuntos deben de ser del mismo tamaño. 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. 2. y si la sumatoria sobrepasa a k. hay que evitar sumar 2 veces el mismo conjunto. y el resto de los elementos que no se han añadido al conjunto es par. NOTA: Esta solución fue traducida y adaptada. Sea X un subconjunto de V tal que para cada elemento de X exista a lo menos un camino Página 60 de 70 . es decir. D pertenecen a V. Pero aún asi.7. a encontrar un conjunto de sumatria igual a k. B. tales que A. Asi que es necesario hacer algunas podas. Esta solución es O(N²) y puede funcionar incluso para N superior a 1000. ya no es necesario seguir buscando. La poda mas obvia es conforme se va generando cada subconjunto se va obteniendo su sumatoria. 4 nodos A. C. Esta poda mejora sustancialmente el rendimiento del programa. 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”. donde k es la mitad de la sumatoria del conjunto de entrada. aunque tambien existen otras soluciones. Existen otras podas de divisibilidad parecidas que queda como tarea encontrar. Como el conjunto puede tener hasta 30 elementos. 2. si k es impar. E el conjunto de calles.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. B es el nodo donde se encuentra la Iglesia. 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.. 2. tan solo se hace una busqueda en profundidad con C y D recorriendo solo aristas etiquetadas como 1. Asi que basta con hacer una búsqueda en amplitud iniciando con O. que no contenga nodo alguno que pertenezca a X. Ya sabiendo los nodos que pertenecen a X. Dada una cuadricula. se tienen menos de (25)² estados posibles a los que se puede llegar. F las calles por donde pueden pasar Greg y Stef. Página 61 de 70 . V el conjunto de de esquinas. se deja de buscar debido a que se acaba de encontrar el camino. Todos los bordes de la cuadricula son paredes. y durante la busqueda evitar meter los nodos marcados. basta con hacer una busqueda en amplitud metiendo inicialmente a la cola A. y X los lugares a donde Greg y Stef puedan llegar. D) donde X es cualquier casilla y D sea la posición de destino de la caja. tambien sabemos de 2 objetos que se encuentran en la cuadricula(el obrero y la caja) y las reglas para mover esos 2 objetos.9. y tomando en cuenta que esta rodeada por paredes. Modelo o espacio de Búsqueda a utilizar La cuadricula tiene un total de 7x7=49 casillas. Por lo tanto. determinar el mínimo número de movimientos para llevar la caja al lugar de destino. y D los bares donde estan Greg y Stef. 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. Una vez que se llegue a la posición (X. 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. Y ademas. Un poco mas claro: A es el nodo de la casa de Miranda. C. eso hace posible hacer una tabla(X. y se marcan los nodos a los que se pueda llegar. donde O es la casilla en la que se encuentra inicialmente el obrero y C es la casilla donde se encuentra inicialmente la caja.Sokoban Estructura de la solución Se tiene una cuadricula de 7x7 en la cual cada casilla puede tener 2 valores: pared o suelo. para llegar a C o a D tan solo usando aristas pertenecientes a F. C. las posiciones de los 2 objetos y un lugar de destino. Determinar el camino mas corto entre A y B. Y) de a lo mas 49x49 donde tabla(X. el obrero puede estar en a lo mas 5x5=25 casillas y la caja a su vez tambien puede estar en 25 casillas. cuantas mas. esto significa que no existe solución eficiente que pueda encontrar la solución optima. mejor. y siempre se mueve la ficha que minimize la sumatoria de las distancias entre las fichas. Un ejemplo de estrategia(aunque no necesariamente el mejor) sería que cada número represente una casilla de la cuadricula.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.10 Comesolo Estructura de la Solución Dado un tablero de comesolo.Aleatorio Se realizan movimientos arbitrarios hasta que no se puedan realizar mas. Esta solución da mas del 50% de los puntos. Solución 2 . Página 62 de 70 . Dos estrategias se pueden combinar para dar origen a una nueva estrategia. ya que es facil eliminar muchas fichas. Solución 1 . 2. pero conforme van quedando menos se va haciendo mas dificil eliminarlas. de esta población se eligen las mejores y se mezclan entre si. moverla. Se repiten los pasos anteriores hasta obtener una estrategia satisfactoria. ningun algoritmo es perfecto ni toma en cuenta todos los espacios de búsqueda. generando nuevas estrategias en la población. Espacio de Búsqueda o Modelo a Utilizar Este problema es un NP(No Polinomial). Cada estrategia produce una única solución. Esto hace que sea mas dificil que queden fichas aisladas y es muy probable encontrar mejores resultados que en la solución 1. mezcla de las dos anteriores. y la estrategia sea recorrer la secuencia de izquierda a derecha y la primer casilla que encuentre que se pueda mover. elimine fichas. en ese momento es conveniente generar mas estrategias aleatoriamente. determinar encontrar una secuencia de movimientos que. Los algoritmos que se encargan de hacer esto son los algoritmos heuristicos. Se repite esta operación hasta que parezca no haber ya mejoras en las estrategias. luego de la población resultante se vuelven a seleccionar los mejores y a mezclarse entre si. sin embargo. siguiendo las reglas del comesolo. Solución 3 – Genetico Esta solución consiste en generar aleatoriamente un cierto número de estrategias a las cuales llamaremos población. es posible encontrar buenas soluciones en un tiempo razonable aunque no necesariamente son las optimas. Modelo 2 Una secuencia de números representa una estrategia para eliminar números en la cuadricula.Glotón Se obtienen las distancias entre todas las fichas del tablero(esto puede ser despues de haber eliminado algunas para agilizar el proceso). aquí se muestran algunos de ellos: Modelo 1 Una cuadricula en la cual se pueden hacer movimientos irreversibles. Existen muchos algoritmos para resolver este problema. 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. ahora. Llamemosle Z a la sumatoria de los K números.-K-Ceros La estructura de la solución está descrita en el mismo problema. como los números son no mayores que max(m). Aplicando el mismo principio se puede demostrar que min(m)*K es el monto menor.Soluciones a los Problemas de Algoritmos Glotones y Divide y Venceras 3. Solución – Glotón Sea m el conjunto dado..-El Ladrón y la Mochila Estructura de la Solución Dado un conjunto de números y K. la media aritmetica no puede ser mayor que max(m). max(m) el mayor elemento que se encuentra en el conjunto y min (m) el menor elemento que se encuentra en el conjunto. Z/K<max(m) !. es decir.2. 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).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. por la construcción debe existir algun número de dicha secuencia que sea menor que max(m). por ello. por ello se puede obviar. Página 63 de 70 . 3. 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. 3.1. en cada posición par de la secuencia el exponente del 2 en los factores primos aumentará. y asi sucesivamente. Algoritmo Auxiliar . como ya se vió. por lo tanto existe un número entero c. 5. y en cada posición divisible entre 5 el exponente del 5 aumentará. Como ya vimos anteriormente. 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)!. Página 64 de 70 . x=0. 2.. tal que x!=(10^k)(c). el número de 0s que tiene a la derecha n! es el número de 5s que tiene en sus factores primos.(n) Nótese que cada 5 números en la factorización dada hay un número divisible entre 5. Por inducción es posible probar que la incidencia del 2 siempre será mayor que la del 5. Modelo a Elegir Se tiene la secuencia de los números factoriales. Tenemos que si 10^k | x! => 10^k | (x+1)! Prueba 10^k divide a x!. cada 25 números un número divisible entre 25. Contar el número de factores divisibles entre 5 se reduce simplemente a n/5. El siguiente algoritmo cuenta el número de 0s a la derecha de n!: 1. el número de ceros que tenga a la derecha n!. por ello.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. en tal secuencia. contador=contador+n/x. mientras(x <= n) 4. etc. Sabemos que 10=(5)(2). x=x*5. Ello significa que si se genera la secuencia de los factoriales. 3. contador=0. por lo tanto. (x+1)! contiene todos los factores primos de x!. el número de factores divisibles entre 25 a n/25. y además los factores primos de x+1.. el i-esimo número de la secuencia es igual al ((i-1)-ésimo)i.¿Cuántos 0s tiene a la derecha n!? Ya sabiendo que simplemente es necesario encontrar el número de 0s en sus factores primos. 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. será equivalente al número de parejas que se puedan formar con 5 y 2 en los factores primos de n!. consideremos la factorización de n! n!=(1)(2)(3)(4)(5)(6)(7)(8). Multiplicando ambos miembros por (x+1). Asi que. es posible hacer una busqueda binaria en el rango de x/2 y x. Esta solución es O((logN)²) y funciona para el 100% de los casos. pero a nadie le hace daño buscarlas. por lo tanto. dada una secuencia S. Se requiere encontrar una solución mas eficiente. . 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. y. la solución en los dos de los casos es cuadrada. . 2!. Asi que.. y en la rama derecha si es mayor o igual. como la de buscar solo con factoriaes multiplos de 5 y es O(NlogN). b. por lo tanto x/2<k<=x. Una forma de encontrar k es contar los 0s en el factorial de cada número entre x/2 y x. 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. tales que a se encuentra antes que b y a>b. ya sabiendo como contar el número de 0s. luego a 4!.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Esta solución contiene varias podas obvias. Solución 1 – Buqueda Secuencial Ahora. contando los 0s a 1!. Solución 1 – Fuerza Bruta Ya sea contando el número de parejas o simulando la burbuja y contando los intercambios. Por ello. Solución 2 – Búsqueda Binaria Sabemos que (x+1)! tiene igual o mas ceros a la derecha que x!. tal que S[x]>S[y] y x<y.Cuenta Burbujas Modelo o Espacio de Búsqueda El algoritmo de burbuja. 3!.3. Existe una gran cantidad de soluciones para este problema que no se van a exponer aquí. luego a 2!.. 3. 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!. se requiere encontrar el número de parejas de números x. 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). k!. Página 65 de 70 . Sin embargo.. 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. independientemente del órden. en algun momento hace un intercambio entre cada par de números a. 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. es contando los 0s para 1!. todos ellos se habrían intercambiado en burbuja. num) si vacio(nodo) valor(nodo)=num. El siguiente algoritmo ilustra el procedimiento de inserción que cuenta los intercambios en burbuja: 1. Sabemos que el ultimo elemento de C debe ser el mas grande entre el ultimo elemento de A y el ultimo elemento de B. Solución 3 – Divide y Venceras Divide Consideremos una secuencia S de N elementos. num) Esta solución funciona en el 100% de los casos. cada que se inserta un elemento se retira de su secuencia original. Entonces. A a la izquierda de B. 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. 2.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. num) sino insertar(hijo_derecho(nodo). todos los que se insertaron en la rama derecha son números mayores que él que se insertaron antes. 5. 8. quiere decir que el ultimo elemento de A se va a intercambiar en burbuja por cada elemento de B. Combina Teniendo ya dos secuencias ordenadas A y B. 3. una secuencia ordenada tardaría un tiempo proporcional a N². por lo tanto. sino si num<valor(nodo) contador=contador+nodos_rama_izquierda(nodo) insertar(hijo_izquierdo(nodo). y cada que se inserta un elemento de A. la secuencia C se puede obtener insertando elementos de derecha a izquierda (primero los mas grandes y luego los mas pequeños). por ejemplo. Cuando eso suceda cada una de estas secuencias se ordena por burbuja y se cuentan sus intercambios. 4. Si el ultimo elemento de A es mas grande que el ultimo elemento de B. sin embargo. ya que el Página 66 de 70 . si en algun momento se inserta en la rama izquierda. 6. funcion insertar(nodo. 7. Nótese que al insertar un nuevo nodo. 9. obtendremos una secuencia ordenada C como unión de las secuencias A y B. se pueden construir peores casos. aunque el caso promedio funciona en tiempo proporcional a NlogN. se deben contar todos los elementos de B como intercambios. cada elemento que se inserta siempre será el mas grande entre el ultimo de la secuencia A y el ultimo de la secuencia B. 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 .r) 1 n1:=q ..n1 + 1] 4 Crea arreglo R[1.r) 6 fin-Si-entonces La parte mas compleja de este algoritmo radica en la función mezcla: Mezcla(A.p.q.Examenes de Preselección para la IOI 2006 Problemas y Soluciones.Desconectando al Enemigo Estructura de la solución Dado un grafo conexo no dirigido con N nodos y N-1 aristas. Ordena-Mezcla(A.4. Este algoritmo tambien es conocido como ordenamiento por mezcla.q+1.. simplemente hay que combinar todas las secuencias hasta formar una secuencia de N elementos ordenada.p.1 20 fin-Si-entonces 21 fin-desde 3.n2 + 1] 5 desde i:=1 hasta n1 haz 6 L[i]:=A[p + i . elemento insertado.q 3 Crea arreglo L[1.r) 1 Si p < r entonces inicio 2 q:=(p + r) div 2 3 Ordena-Mezcla(A. y ya tendremos contados el número de intercambios en burbuja en O (NlogN). El siguiente código muestra el algoritmo de mezcla. determinar el número mínimo Página 67 de 70 . Ahora.p + 1 2 n2:=r ..r) // ORDENA LA MITAD DERECHA 5 Mezcla(A. en burbuja se intercambiaría con todos los elementos de B.p.p.q.q) // ORDENA LA MITAD IZQUIERDA 4 Ordena-Mezcla(A. si se conserva siempre todo nodo que no tenga hijos que no hayan sido borrados.Examenes de Preselección para la IOI 2006 Problemas y Soluciones. Se puede hacer una busqueda en profundidad tomando en cuenta estos criterios. sobra un solo nodo. de esa forma. o borrar a su padre y conservar el nodo. Es decir. borrar el nodo y conservar a su padre. 3 Para cada hijo i de nodo 4 si(DFS(i)=verdadero) 5 borrar=verdadero. si cada nodo se asocia a una arista. Esta solución funciona en el 100% de los casos. Nótese que si se conserva al padre directo. si se borra el resto del grafo. Podemos concluir que el grafo no tiene ciclos. se observa que por cada nodo que se va colocando se va colocando una arista. es decir. que lo une con algun otro nodo. un nodo debe ser borrado si y solo si alguno de sus hijos no fué borrado. 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). la cual apunta a su padre. si se quiere volver a generar el grafo inicial. Página 68 de 70 . por ello. el número de nodos sin borrar será igual o mejor que si no se conservara. y se deja solo el nodo X que quedó sobrando. nunca hay arista que una a 2 nodos ya colocados anteriormente. Asi que. 8 regresa(borrar). primero colocando los nodos cuyo camino mas corto con X sea 1. luego los nodos cuyo camino mas corto con X sea 2. El siguiente pseudocodigo muestra la busqueda en profundidad aplicando el principio mencionado: 1 Funcion DFS(nodo) 2 borrar=falso. tambien hay que borrar al padre del padre directo. aquí se pueden hacer dos cosas. de esta forma se encuentra el minimo de nodos a borrar en tiempo lineal. Modelo o Espacio de Búsqueda El grafo pose N-1 aristas. solo habría que borrar al padre directo. 6 si borrar 7 contador=contador+1. La comprobación de lo anterior es bastante simple: Si todos sus hijos fueron borrados solo tiene una arista. Y si se conserva al nodo. Por ello. es decir. es un árbol. 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. Solución – Glotón Todo nodo de un árbol solo tiene arista con su padre directo y con su(s) hijo(s) directo(s). v)<d(p(u). Prueba: Sabemos que d(p(j). | d(i. pero hay muchas mas soluciones ¡incluso hay algunas de O(1)! Solución 1 – Fuerza Bruta Simplemente se recorre la cuadricula con 4 contadores. p(y)=p(x). entonces p(u)=p(v). en su mayoría O(NlogN). j)=|ix-jx|+|iy-jy|. 3. va a estar una unidad mas lejos. Prueba: Generalizando la proposición 2. k)>d(p(j). k)=d(p(j). entonces p(h)=p(g). sea d(i. y para cada casilla j. j)<d(p(j). j)∓1 d(x. j)+1. tanto p como h comparten uno de ellos.5. aquí se mostrán algunas basadas en Divide y Venceras. S) | = 1 Prueba: Sabemos que d(i. w casillas sobre un mismo eje. tal que d(p(j). sea g cualquier casilla y h una casilla adjacente a g. tal que d(p(u). j) => p (k)=p(j). j)+1<d(p(j). Proposición 2: Sea p(j) el competidor al que pertenece la casilla j(es decir. R) – d(i. k)=d(x. S)|=1. j)+1>d(x. y por lo tanto va a pertenecer al mismo competidor. y p(u)=p(w) Página 69 de 70 . tal que d(p(g). k) y p(k)=p(j) Proposición 3: Sean u. j) => d(x. la guía que está en la casilla j se va con p(j)). y además |Rx-Sx|=1 ó |Ry-Sy|=1 por lo tanto. Si d(p(x). h)+1. g)=d(p(h). y)>d(p(x). por ello. u)<d(p(u).Examenes de Preselección para la IOI 2006 Problemas y Soluciones. el lado de g opuesto al lado que comparte con h es compartido con otra casilla m.. nótese que cada casilla que se agrega en la misma dirección. además.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). j)-1 d(x. m)=d(p(g). si d(p(h). Esta solución es O(N²) Solución 2 – Reducción a cuadrados Se sabe que si u. Este problema presenta muchas soluciones. j)+1 d(x. g)+1=d(p(g). j) siendo x cualquier competidor diferente de j d(p(j). v. se busca p(j) y se aumenta su contador respectivo. recordando que cada casilla tiene 4 lados. h)+2. y sea k una casilla adjacente a j. R)-d(i. x). k)<d(p(j). j)>d(x. para que R y S tengan un lado en común. si p(u)=p(w). w). por lo tanto d(x. |d(i. Rx-Sx=0 o Ry-Sy=0. j) la distancia entre el competidor i y la casilla j. uno para cada competidor. w son casillas que estan sobre un mismo eje. Por ello. de la cuadricula. Solución 3 – Fila por fila Para cada fila. u y s en el eje y. y w y t en el eje y. se divide el cuadrado en 4 cuadrados mas pequeños y en cada uno se repite la operación. toda casilla p(j)=p(u) para toda casilla j dentro del rectangulo. Página 70 de 70 . Estos vértices pueden ser encontrados a traves de múltiples búsquedas binarias o igualmente con despejes. y sean s y t otras casillas tales que s y t esten alineados en el eje x. Asi que. estas 4 casillas formarán un rectangulo. 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°. y recursivamente contar cuantas casilla pertenecen a cada competidor de la siguiente manera: Si las 4 casillas de las esquinas pertenecen al mismo. si u y w estan alineados sobre el eje x. determinar cuantas casillas le pertenecen a cada quien. por ello no es muy complicado encontrar los vértices de dicho polígono. se puede dividir el rectangulo inicial en 6 cuadrados. todo el cuadrado pertenece al mismo. y si p(u)=p(w)=p (u)=p(s).Examenes de Preselección para la IOI 2006 Problemas y Soluciones. ya sea a base de ecuaciones o por búsqueda binaria. si se implementa planteando con despejes de ecuaciones esta solución es O(N). toda casilla p(u)=p(v) para toda v que se encuentre entre u y w. sino. entonces.
Copyright © 2024 DOKUMEN.SITE Inc.