Concurso de programación 2008 Escuela Universitaria de Informática Universidad Politécnica de Madrid Escoba Entrenamiento 2 Nivel 1 El juego de la escoba consiste en sumar 15 puntos con una de las cartas que el jugador tiene en la mano y las cartas que hay en la mesa. Inicialmente, cada jugador recibe tres cartas de la baraja española, y en la mesa se ponen otras cuatro. El número de cartas de cada jugador va disminuyendo con cada ronda hasta quedarse sin ninguna, momento en que se reparten otras tres. Este proceso continúa hasta que no queden cartas por repartir. Después de que se juegue la última mano se procederá a contar el total de puntos de cada jugador. El número de cartas en la mesa irá variando según se vaya desarrollando el juego e incluso puede ser 0, si un jugador acaba de conseguir una escoba. Lo que nunca podrá ocurrir es que, con una combinación de cartas en la mesa, se pueda sumar 15. Las cartas con número tienen un valor igual a su número y las tres restantes valen 8 la sota, 9 el caballo y 10 el rey. Cuando un jugador completa 15 puntos, retira su carta utilizada y las que se han usado de la mesa para completar los 15 puntos. Pero, si no puede sumar 15 puntos, pone una de sus cartas en la mesa. Si se retiran todas las cartas de la mesa en una jugada, el jugador que lo haga gana directamente 1 punto. Esta jugada se llama “hacer escoba”. Si en la jugada un jugador se lleva el 7 de oros, obtiene directamente 1 punto. Además de esto, al final de la partida, el jugador que tenga más oros, sietes o cartas se llevará 1 punto por cada uno de estos conceptos. Cada jugador debe tratar de conseguir los máximos puntos posibles en cada jugada y, si no es posible conseguir ningún punto directo, jugar para que al final pueda conseguir los máximos puntos ”indirectos”. El problema que se plantea es el siguiente: dado un conjunto de cartas en la mesa y tres cartas que un jugador tiene “en la mano”, determinar, de todas las posibles, cuál es la mejor jugada en ese momento. Entrada En la primera lı́nea se indica el número de casos de prueba. Cada caso de prueba se describe de la siguiente manera: un entero en n (0 ≤ n ≤ 8) en una lı́nea que indica el numero de cartas en la mesa y, para cada una de éstas, una lı́nea con un carácter y un número separados por un espacio (palo-espacio-número) que codifican la carta del siguiente modo: a) Carácter: O (oros), C (copas), E (espadas) ó B (bastos). b) Número: 1, 2, 3, 4, 5, 6, 7, 8 (sota), 9 (caballo) ó 10 (rey). Finalmente hay tres lı́neas para codificar las cartas que el jugador tiene en la mano. Salida La solución de cada uno de los casos de prueba se escribe del siguiente modo: un entero en una lı́nea indicando el número de cartas que juega el jugador (0 si no puede jugar ninguna) y, para cada una de éstas, una lı́nea indicando la carta, empezando por la que juega de su mano. Ejemplo de entrada 2 3 C B E O B O 2 O B C B E 6 9 2 7 7 10 7 9 5 6 4 Salida correspondiente al ejemplo 3 O C E 0 7 6 2 Archivos de entrada y salida El archivo ejecutable deberá leer los datos del problema y escribir la solución en los siguientes archivos de entrada y salida respectivamente: - Entrada: cpeui08 Escoba.txt - Salida: cpeui08 Solucion Escoba.txt Concurso de programación 2008 Escuela Universitaria de Informática Universidad Politécnica de Madrid Zapatero Entrenamiento 2 Nivel 2 Un zapatero tiene N pedidos de clientes que debe entregar. El zapatero suele tardar varios dı́as en completar cada pedido y, únicamente, puede trabajar en uno concreto cada dı́a. Para el pedido i−ésimo, el entero Ti (1 ≤ Ti ≤ 1000) determina el número de dı́as que tardará el zapatero en finalizar el trabajo. Pero la popularidad tiene un precio. Por cada dı́a de demora en el inicio del trabajo en el pedido i−ésimo, el zapatero se ha comprometido a pagar una compensación de Si (1 ≤ Si ≤ 10000) céntimos. Ayudemos al zapatero escribiendo un programa que determine el orden en que debe de realizar los pedidos, para que la penalización total sea mı́nima. Entrada En la primera lı́nea se indica el número de casos de prueba. Cada caso de prueba se describe de la siguiente manera: una lı́nea con el número de pedidos N (1 ≤ N ≤ 1000) y, para cada uno de los pedidos, una lı́nea con el tiempo de finalización y la compensación económica del pedido, separados por un espacio. Salida Para cada caso de prueba el programa deberá escribir la secuenciación de los pedidos (representados por su posición en la entrada) que conlleva la menor compensación posible: un pedido (entero) en cada lı́nea. Si existen varias soluciones posibles, se considerará la primera en orden lexicográfico. Ejemplo de entrada 1 4 3 1 2 5 4 1000 2 5 Salida correspondiente al ejemplo 2 1 3 4 Archivos de entrada y salida El archivo ejecutable deberá leer los datos del problema y escribir la solución en los siguientes archivos de entrada y salida respectivamente: - Entrada: cpeui08 Zapatero.txt - Salida: cpeui08 Solucion Zapatero.txt Concurso de programación 2008 Escuela Universitaria de Informática Universidad Politécnica de Madrid Partición Entrenamiento 2 Nivel 3 Sea R una región limitada por una curva poligonal con lados horizontales y verticales, con vértices de coordenadas enteras y descrita en sentido antihorario. Considerando particiones de R en rectángulos de altura 1, se trata de determinar el número de rectángulos de la partición de cardinal mı́nimo. En el ejemplo siguiente la respuesta es 27. R Entrada En la primera lı́nea se indica el número de casos de prueba. Para cada caso de prueba: en una lı́nea se indica el número de vértices de la poligonal, n, y en las siguientes n lı́neas aparecen las coordenadas de los vértices (dos enteros entre 0 y 100 separados por un espacio). Salida Una lı́nea por cada uno de los casos de prueba indicando la solución. Ejemplo de entrada 2 10 0 2 2 3 3 2 2 1 1 0 12 0 2 2 4 4 3 3 5 5 1 1 0 0 0 1 1 2 2 3 3 1 1 0 0 2 2 1 1 0 0 4 4 3 3 Salida correspondiente al ejemplo 3 6 Archivos de entrada y salida El archivo ejecutable deberá leer los datos del problema y escribir la solución en los siguientes archivos de entrada y salida respectivamente: - Entrada: cpeui08 Particion.txt - Salida: cpeui08 Solucion Particion.txt