Manjatan P48375


Statement
 

pdf   zip

Sacarse el carnet de conducir no es nada fácil, y menos si lo intentas en Manjatan. En esta famosa ciudad las calles son segmentos cuyos extremos tienen coordenadas enteras. Las calles únicamente tienen dos direcciones posibles: vertical y horizontal. Además, algunas calles son de sentido único. El examinador te pedirá que realices un trayecto por la ciudad (“primera a la izquierda, tercera a la derecha, segunda a la derecha”, etc.); tu deberás cumplir sus órdenes, con las siguientes restricciones:

  • Si el examinador te pide girar por una calle por la que no deberías avanzar, por ser contradirección (estas cosas pasan) debes negarte a cumplir su orden, y seguir avanzando hasta el próximo giro válido en la dirección indicada.

  • El examen acaba cuando no hay más órdenes (en tal caso, debes seguir avanzando hasta llegar al final de la calle) o si llegas al final de una calle sin que te haya sido posible cumplir la orden del examinador.

En este problema te pedimos que calcules la distancia que avanzarás mientras realizas el examen.

Entrada

Una línea con el número 0<k<10000<k<1000 de calles de Manjatan, seguido de kk líneas con 55 números cada una, separados por una cantidad arbitraria de espacios: estos 5 números son las coordenadas x,yx, y de los dos extremos de cada calle, y un número adicional para indicar si la calle es de doble sentido (00) o de sentido único (11); en este caso la dirección permitida va del primer extremo al segundo. No habrá dos calles que se superpongan (exceptuando en los puntos de cruce); las calles horizontales sólo intersecan con las verticales, y viceversa.

Los tres ejemplos de entrada se corresponden con los siguientes diagramas (las flechas indican calles de un único sentido).

(-1,-1)(5,12) (-1,-1)(5,12) (2,0)(2,11) (3,3)(3,9) (0,4)(4,4) (1,7)(4,7) (0,10)(4,10)

(-1,-1)(9,12) (-1,-1)(9,12) (0,7)(8,7) (0,2)(8,2) (3,0)(3,11) (6,1)(6,11)

(-1,-1)(11,12) (-1,-1)(12,12) (0,8)(10,8) (0,2)(7,2) (9,2)(11,2) (3,5)(9,5) (9,2)(9,8) (2,0)(2,9) (3,7)(9,7) (10,1)(10,9) (7,2)(7,7) (3,7)(3,4)

A continuación, un número 0n100000\leq n \leq 10000 con los exámenes a realizar sobre la ciudad, seguido de los nn exámenes. Cada examen está formado por un número 1ik1\leq i\leq k en una línea que indica el punto de partida del examen (el primero de los dos extremos de la calle ii-ésima, en dirección hacia el segundo extremo), seguido de un número indeterminado de líneas, cada una de las cuales contiene una orden de la forma xxI o xxD con x>0x>0 (gira la xx-ésima calle a la izquierda, o la xx-ésima calle a la derecha). Todo examen acaba con la orden 0X (que debes ignorar). Ningún examen tendrá más de 100 órdenes.

Salida

Escribe la distancia que recorres hasta que acaba el examen, por cualquiera de los dos motivos posibles. Si el examen acaba antes de tiempo por no haber sido posible cumplir alguna de las órdenes, escribe también un signo de exclamación después de la respuesta.

Puntuación

  • Test1:

    Resolver casos donde los extremos de todos los segmentos no inciden con ningún otro segmento, y donde todas las calles son de doble sentido (como el ejemplo 1), y cuyas coordenadas están entre 00 y 10410^4.

  • Test2:

    Resolver casos donde los extremos de todos los segmentos no inciden con ningún otro segmento (como el ejemplo 2), y cuyas coordenadas están entre 00 y 10410^4.

  • Test3:

    Resolver casos de todo tipo (como el ejemplo 3), con calles cuyas coordenadas están entre 10910^{-9} y 10910^9.

Public test cases
  • Input

    5
    2 0   2 11   0
    3 3   3 9    0
    0 4   4 4    0
    1 7   4 7    0
    0 10  4 10   0
    5
    1 1D 0X
    2 1D 1I 0X
    3 1I 0X
    4 1I 1D 0X
    5 1I 1I 0X
    

    Output

    6
    2!
    9
    6
    3!
    
  • Input

    4
    0 2 8 2 0
    0 7 8 7 1
    3 0 3 11 0
    6 1 6 11 0
    5
    1 1D 0X
    1 1D 1I 0X
    1 1I 0X
    1 1I 1D 0X
    1 1I 1I 0X
    

    Output

    5
    5!
    12
    13
    12!
    
  • Input

    10
    0 8   10 8   0
    0 2   7 2   1
    9 2   11 2   0
    3 5   9 5   1
    9 2   9 8   0
    2 0   2 9   0
    3 7   9 7   1
    10 1   10 9   1
    7 2   7 7   0
    3 7   3 4   0
    4
    1 1D 1I 1I 2I 1I 2I 1D 1I 0X
    2 3I 0X
    2 2I 1D 1I 1I 0X
    2 0X
    

    Output

    18!
    7!
    24
    7
    
  • Information
    Author
    Omer Giménez
    Language
    Spanish
    Official solutions
    C++
    User solutions
    C++