Rastreador P61447


Statement
 

pdf   zip

Un robot rastreador es aquel que intenta seguir una línea. Uno de los diseños más comunes consiste en tener una fila de sensores situada delante del robot, perpendicular a la dirección de la marcha. Asumiendo que nuestros sensores son binarios (cada sensor nos da un 00 si no detecta línea, y un 11 si sí la detecta), una lectura como la siguiente

1000111000

querría decir que disponemos de 10 sensores, y que el sensor de más a la izquierda y tres de los sensores del medio han detectado línea.

En este problema te pedimos que programes un algoritmo sencillo de rastreo de líneas, que a partir de las lecturas de esta fila de sensores decida cómo debe girar el robot. En concreto, sea xx el primer sensor empezando por la derecha que detecte línea, y sea nn el número total de sensores (en el ejemplo anterior, n=10n=10, x=4x=4). Tu programa deberá escribir un número MM entre el 90-90 (giro máximo a la izquierda) y el 9090 (giro máximo a la derecha) en función de los valores de xx y nn, según la fórmula M=90180x1n1.M = 90 - 180\frac{x-1}{n-1}. En el ejemplo anterior se tendría, pues, M=30M=30. Si el valor resultante de MM no es entero, redondéalo hacia el 00.

Entrada

En una línea, el número de casos 0k10000\leq k\leq 1000, seguido de kk líneas, cada una de las cuales contiene una lectura de la fila de sensores. Las lecturas se te pueden pasar de dos formas distintas: en binario, o codificadas en decimal. Una lectura en binario son siempre 10 bits (00 o 11), donde siempre se cumple que el bit de más a la izquierda tiene el valor 11. Una lectura en decimal es un número del 22 al 999999999=1091999999999=10^9-1 que, al ser pasado a binario (base 2), produce la lectura de los sensores. Por ejemplo, el número decimal 214214 se corresponde con el número binario 1101011011010110, puesto que 214=1072=(532+1)2=(262+1)22+2=1324+22+2=(62+1)24+22+2=326+24+22+2=(12+1)26+24+22+2=27+26+24+22+2=11010110b.\begin{align*} 214 &= 107\cdot 2 = (53\cdot 2 + 1)\cdot 2 = (26\cdot 2 +1)\cdot 2^2 + 2 = 13\cdot 2^4+2^2 + 2 = (6\cdot 2+1)\cdot 2^4+2^2+2 \\ &= 3\cdot 2^6+2^4+2^2+2 = (1\cdot 2+1)\cdot 2^6 +2^4 +2^2+2= 2^7 + 2^6 +2^4 + 2^2 + 2 = 11010110_b. \end{align*}

Salida

Escribe tantas líneas como casos, con la dirección que debe seguir el robot. En caso que la entrada sea binaria, siempre tendrás n=10n=10. Si la entrada es en decimal, debes asumir que nn és el mínimo número de dígitos binarios que necesitas para representar el número dado (n=8n=8 en el ejemplo anterior).

Puntuación

  • Test1:

    Resolver varios casos donde todas las entradas son en binario.

  • Test2:

    Resolver varios casos de todo tipo.

Public test cases
  • Input

    6
    1000111000
    1000000000
    1010000000
    1000111001
    1000000001
    1000000110
    

    Output

    30
    -90
    -50
    90
    90
    70
    
  • Input

    6
    214
    216
    384
    258
    123456788
    987654320
    

    Output

    64
    12
    -67
    67
    76
    65
    
  • Information
    Author
    Omer Giménez
    Language
    Spanish
    Official solutions
    C++
    User solutions
    C++