QOJ.ac

QOJ

Limite de temps : 3 s Limite de mémoire : 256 MB Points totaux : 100

#7592. Números aleatorios

Statistiques

露露, 花花 y 萱萱 se han interesado recientemente por los números aleatorios de los ordenadores. Como es bien sabido, las secuencias de números aleatorios generadas por ordenador no son verdaderamente aleatorias, sino seudoaleatorias, producidas mediante determinadas reglas.

Un día, 露露 conoció un método para generar números aleatorios llamado Mersenne twister. Dados los parámetros iniciales $m\in\mathbb Z^+$, $x\in\mathbb Z\cap[0,2^m)$ y el valor inicial $M_0\in\mathbb Z\cap[0,2^m)$, construye la secuencia seudoaleatoria $\{M_n\}$ mediante la recurrencia:

$$M_n=\begin{cases}2M_{n-1},&2M_{n-1}<2^m,\\(2M_{n-1}-2^m)\mathbin{\mathrm{xor}}x,&2M_{n-1}\ge2^m.\end{cases}$$

Aquí, $\mathrm{xor}$ es la operación de disyunción exclusiva binaria (el operador ^ de C/C++). Se dice que el parámetro $x$ es bueno si, al tender la longitud de la secuencia a infinito, sus valores en $\mathbb Z\cap(0,2^m)$ aparecen aproximadamente con igual probabilidad. Por ejemplo, cuando $m>1$, es evidente que $x=0$ no es bueno.

Después de que 露露 presentara Mersenne twister a sus compañeros, 花花 quiso comprobar su grado de aleatoriedad mediante algunas pruebas clásicas. Para ello, calculó algunos valores $M_k$ con el ordenador.

Pero la atenta 萱萱 observó que, al introducir una vez $k$ en binario, 花花 había añadido por error $l$ ceros al final. Iba a advertirle del descuido, pero 花花 ya había calculado y anotado el valor erróneo de $M_k$ sin guardar el valor de $k$. Aunque en realidad no era un problema grave, cuando 萱萱 le explicó el descuido, 花花, perfeccionista como es, le rogó que corrigiera el valor de $M_k$. 萱萱 te ha encargado esta tarea a ti, su inteligencia artificial.

Entrada

La primera línea del archivo de entrada random.in contiene un entero positivo $m$. La segunda contiene $x$ en binario ($m$ cifras, ordenadas de la menos significativa a la más significativa). La tercera contiene $M_0$ en binario, con el mismo orden que $x$. La cuarta contiene un entero $type$.

A continuación se da uno de estos dos casos:

  1. $type=0$ (萱萱 anotó la entrada de 花花): la quinta línea contiene un entero que representa el valor correcto de $k$ anotado por 萱萱.
  2. $type=1$ (萱萱 no pudo anotar la entrada de 花花): la quinta línea contiene $l$ y la sexta contiene la representación binaria del valor erróneo de $M_k$ calculado por 花花.

Salida

El archivo de salida random.out debe contener una única línea con una cadena de $m$ ceros y unos que represente el valor correcto de $M_k$ obtenido, también ordenada de la cifra menos significativa a la más significativa.

Ejemplos

Entrada 1

10
1 1 1 0 0 1 1 1 0 0
1 1 1 0 0 0 0 0 1 1
0
100

Salida 1

0101111001

Entrada 2

10
1 1 1 0 0 1 1 1 0 0
1 1 1 0 0 0 0 0 1 1
1
3
0 1 0 1 1 1 1 1 0 1

Salida 2

0101111001

Entrada y salida 3

Consulta random/random.in y random/random.ans en el directorio del concursante.

Restricciones

Caso de prueba $m$ $k$ $l$ $type$ ¿Es bueno $x$?
1 $\le10$ $\le10^{9}$ No aplicable $0$ Sí
2 $\le10$ $\le10^{9}$ $\le10$ $1$ Sí
3 $\le100$ $\le10^{9}$ No aplicable $0$ Sí
4 $\le100$ $\le10^{9}$ No aplicable $0$ Sí
5 $\le100$ $\le10^{9}$ No aplicable $0$ Sí
6 $\le100$ $\le10^{5}$ $=1$ $1$ Sí
7 $\le100$ $\le10^{9}$ $\le10$ $1$ Sí
8 $\le100$ $\le10^{9}$ $\le10$ $1$ Sí
9 $\le100$ $\le10^{9}$ $\le10$ $1$ Sí
10 $\le1000$ $\le10^{18}$ $\le10$ $1$ Sí
11 $\le1000$ $\le10^{18}$ $\le10$ $1$ Sí
12 $\le1000$ $\le10^{18}$ $\le10$ $1$ Sí
13 $\le2000$ $\le10^{9}$ No aplicable $0$ Sí
14 $\le2000$ $\le10^{9}$ No aplicable $0$ Sí
15 $\le500000$ $\le10^{6}$ No aplicable $0$ No
16 $\le500000$ $\le10^{6}$ No aplicable $0$ No
17 $\le1000000$ $\le10^{6}$ No aplicable $0$ No
18 $\le1000000$ $\le10^{6}$ No aplicable $0$ No
19 $\le1000000$ $\le10^{6}$ No aplicable $0$ No
20 $\le1000000$ $\le10^{6}$ No aplicable $0$ No

Editorials

IDTypeStatusTitlePosted ByLast UpdatedActions
EditorialOpen Official EditorialQingyu- Download

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.