Juego del Viajero Veloz


Submit solution

Points: 100 (partial)
Time limit: 1.0s
Memory limit: 64M

Author:
Problem type
Allowed languages
C, C++, Java, Python

Viajero Veloz es un juego de mesa en el que los jugadores compiten para llegar primero al final de un camino. Vamos a definir un camino como una secuencia de C cuadrados consecutivos convenientemente numerados entre 1 y C. Los jugadores están convenientemente numerados entre 1 y J y se turnan siempre en el mismo orden. En primer lugar el jugador número 1, segundo el jugador número 2, y así sucesivamente hasta jugador número J. En cada turno un jugador lanza un dado y avanza tantas casillas como el valor del dado indica. Cada jugador comienza con su pieza en la primera casilla del tablero.

Adicionalmente, todos los cuadrados tienen un número entero que representa un movimiento obligatorio que los jugadores deben hacer cuando caigan en esa casilla (sólo después de lanzar un dado). Usted puede asumir con seguridad que el movimiento obligatorio siempre se puede hacer y las piezas nunca van fuera del tablero de juego; es decir, nunca se van antes de la primera o después de la última casilla del tablero. Los movimientos obligatorios deben hacerse de acuerdo con las siguientes reglas:

• Los jugadores deben usar los movimientos obligatorios exactamente una vez por tirada/turno.

• El jugador debe permanecer en la misma casilla del tablero, si su pieza cae en una casilla con el número 0.

• El jugador debe ir hacia atrás si su pieza cae en una casilla con un valor negativo; la pieza se mueve hacia atrás tantas casillas como el movimiento obligatorio indica (valor absoluto del número en la casilla).

• El jugador debe ir hacia adelante si su pieza cae en una casilla con un valor positivo; la pieza se mueve hacia adelante tantas casillas como el movimiento obligatorio indica (valor absoluto del número en la casilla).

El juego llega al final para los jugadores cuando caen en la última casilla del camino; ellos no lanzan más los dados y ganan el juego en el orden en que llegan a esa casilla/cuadrado. Tenga en cuenta que otros jugadores podrían seguir jugando a pesar de ello. Se garantiza que la última casilla siempre tiene un movimiento obligatorio igual a cero. Es su tarea simular el proceso de juego y determinar la secuencia de números que indican los jugadores que ganaron el juego, en ese orden (si es que existe un ganador por lo menos).

Entrada

La primera línea de entrada contiene un número entero T (1 \leq T \leq 100) que representa el número de casos de prueba. Cada caso de prueba consta de 3 líneas. La primera contiene 3 números enteros: N (2 \leq N \leq 10) el número de jugadores, S (5 \leq S \leq 100) el número de casillas del tablero, y D (1 \leq D \leq 1000) el número de dados lanzados. La siguiente línea contiene los valores de las casillas del tablero y la última línea contiene los valores de los dados lanzados en el orden que se deben tomar para el juego. Las tiradas de los dados se encuentran siempre entre 0 y 9, y se puede asumir con seguridad que los movimientos siempre se pueden hacer y las piezas nunca se van fuera del tablero de juego; es decir, nunca se van después de la última casilla del tablero. Todas las tiradas son válidas y se garantiza que hay al menos un jugador que no está en la última casilla del tablero en ese momento.

Salida

Para cada caso usted debe imprimir una línea con la secuencia de números de los ganadores, en el orden en que llegan al final del camino. Imprima todos los números separados por exactamente un espacio en blanco. En caso de no tener ningún ganador, imprimir el valor -1 en su lugar.

Ejemplo de Entrada

2
5 8 12
0 -1 5 -1 0 -2 1 0
3 2 7 1 1 5 3 4 1 3 3 3
3 5 8
0 -1 0 -1 0
1 1 1 1 1 1 1 1

Ejemplo de Salida

2 3 1 5 4
-1

Comments

There are no comments at the moment.