Séptima Evaluación de Temas Selectos de Sistemas
Jueves 23 de junio de 2005 (13:00 a 15:55)
Instrucciones: Deberán
resolver dos problemas, por lo que me deberán entregar dos
códigos fuente, uno para cada problema. Cada problema se
evaluará con 10 casos de prueba y cada uno de ellos vale 1
punto. Pongan un comentario en su código indicando los dos
integrantes del equipo. La lectura se hará desde la entrada
estándar y la escritura hacia la salida estándar. En sus
pruebas, usen la redirección de entrada y salida.
Problema 9.6.2: Jugando con ruedas (ruedas.c, ruedas.cpp
ó ruedas.java)
Considera la siguiente máquina matemática. Los
dígitos que van del 0 al 9 están impresos
consecutivamente (en la dirección de las manecillas del reloj)
en la periferia de cada rueda. Los dígitos de arriba de cada una
de las ruedas forman un entero de cuatro dígitos. Por ejemplo,
en la figura de abajo las ruedas forman el entero 8056. Cada rueda
tiene dos botones asociados con ella. Si presionas el botón
marcado con una flecha a la izquierda
se gira la rueda un dígito en la dirección de las manecillas del
reloj y si presionas el botón marcado con una flecha a la
derecha se gira la rueda un
dígito en la dirección
contraria a las manecillas del reloj. Comenzamos con una
configuración inicial de las ruedas, donde los dígitos de
la parte de arriba forman el entero S1S2S3S4.
Se te dará un conjunto de N configuraciones prohibidas Fi1Fi2Fi3Fi4
(con 1 <= i <= N) y una configuración objetivo T1T2T3T4.
Tu tarea es escribir un programa que calcule el número
mínimo de veces que se tiene que apretar un botón que se
requieren para transformar la configuración inicial en la
configuración objetivo sin pasar por ninguna
configuración prohibida.
Entrada: La primera
línea de la entrada contiene un entero M dando el número
de casos. Sigue una línea en blanco. La primera línea de
cada caso de prueba contiene la configuración inicial de las
ruedas, especificada como cuatro dígitos. Cada dos
dígitos consecutivos estarán separados por un espacio. La
siguiente línea contiene la configuración objetivo. La
tercera línea contiene un entero N dando el número de
configuraciones prohibidas. Cada una de las siguientes N líneas
contiene una configuración prohibida. Habrá una
línea en blanco entre cada dos casos de prueba consecutivos.
Salida: Para cada caso de
prueba en la entrada escribe una línea que contenga el
número mínimo de veces que se debe apretar un
botón. Si no se puede llegar a la configuración objetivo
escribe un -1.
Pista: ¿Cuál es
la gráfica que representa a este problema?
Ejemplos: Entrada
y salida. Para usar este ejemplo, escriban ruedas < ruedas.ent > ruedas.txt
y comparen ruedas.txt con
ruedas.sal
Problema 9.6.3: El guía de turistas (tuguia.c, tuguia.cpp
ó tuguia.java)
El señor G trabaja como guía de turistas en Bangladesh.
Su trabajo actual es el de llevar a un grupo de turistas a una ciudad
distante. Como en todas partes, ciertos pares de ciudades están
conectados por carreteras de doble sentido. Cada par de ciudades
vecinas tiene un servicio de autobús que corre exclusivamente
entre estas dos ciudades y que usa la carretera que las une. Cada
servicio de autobús tiene un límite particular en el
número máximo de pasajeros que puede transportar. El
señor G tiene un mapa que muestra las ciudades y las rutas de
autobuses que las conectan, así como el límite de
pasajeros para cada servicio de autobús. No siempre le es
posible llevar a todos los turistas a la ciudad de destino en un solo
viaje. Por ejemplo, considera el mapa de siete ciudades mostrado abajo,
donde las líneas representan caminos y los números
escritos en cada línea indican el límite de pasajeros
asociado al servicio de autobús. Le tomará al menos cinco
viajes al señor G para llevar a 99 turistas de la ciudad 1 a la
ciudad 7, ya que el también tiene que subir al autobús
con cada grupo. La mejor ruta a tomar es la 1 - 2 - 4 - 7.
Ayúdale al señor G a encontrar la ruta por la que pueda
llevar a todos sus turistas a la ciudad de destino en el menor
número de viajes.
Entrada: La entrada contiene
uno o más casos de prueba. La primera línea de cada caso
de prueba contendrá dos enteros: N (con 0 <= N <= 100) y
R, que representan el número de ciudades y el número de
carreteras, respectivamente. Cada una de las siguientes R líneas
contendrá tres enteros C1, C2 y P donde C1
y C2 son números de ciudad y P (con P > 1) es el
número máximo de pasajeros que se pueden llevar en el
servicio de autobús entre esas dos ciudades. Los números
de ciudad son enteros en el rango 1 a N. La línea R+1
contendrá tres enteros S, D y T que representan,
respectivamente, la ciudad de origen, la ciudad de destino y el
número de turistas a ser transportados. La entrada termina con
N=R=0.
Salida: Para cada caso de
prueba en la entrada, escribe el número mínimo de viajes
requeridos para este caso en una línea aparte. Nota: Si vas a
usar los evaluadores automáticos, observa que el formato de la
salida es bastante distinto en ellos.
Pista: ¿Se podrá reducir este problema a revisar si una
cierta gráfica es conexa?
Ejemplos: Entrada
y salida. Para usar este ejemplo, escriban tuguia < tuguia.ent > tuguia.txt
y comparen tuguia.txt con
tuguia.sal