QOJ.ac

QOJ

时间限制: 3 s 内存限制: 256 MB 总分: 100

#7592. Nombres aléatoires

统计

露露, 花花 et 萱萱 s'intéressent depuis peu aux nombres aléatoires produits par les ordinateurs. Comme chacun le sait, les suites de nombres aléatoires générées par un ordinateur ne sont pas véritablement aléatoires : ce sont des nombres pseudo-aléatoires générés suivant certaines règles.

Un jour, 露露 découvre une méthode de génération de nombres aléatoires appelée Mersenne twister. Étant donnés les paramètres initiaux $m\in\mathbb Z^+$ et $x\in\mathbb Z\cap[0,2^m)$, ainsi que la valeur initiale $M_0\in\mathbb Z\cap[0,2^m)$, elle construit la suite pseudo-aléatoire $\{M_n\}$ par la récurrence suivante :

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

Ici, $\mathrm{xor}$ désigne le ou exclusif binaire (l'opérateur ^ en C/C++). Si le choix du paramètre $x$ fait que, lorsque la longueur de la suite tend vers l'infini, ses valeurs sont approximativement équiprobables dans $\mathbb Z\cap(0,2^m)$, alors $x$ est dit « bon ». Par exemple, lorsque $m>1$, $x=0$ n'est manifestement pas bon.

Après que 露露 a présenté Mersenne twister à ses camarades, 花花 souhaite en évaluer le caractère aléatoire à l'aide de tests classiques d'aléa. À cette fin, 花花 calcule plusieurs valeurs $M_k$ sur un ordinateur.

Mais 萱萱, qui est attentive, remarque que, lors d'une saisie de $k$ en binaire, 花花 a ajouté par erreur $l$ zéros à la fin. 萱萱 s'apprête à signaler cette étourderie, mais 花花 a déjà calculé et noté la valeur erronée de $M_k$, sans conserver la valeur de $k$. Bien que cela ne constitue pas vraiment un problème fatal, lorsque 萱萱 lui signale cet oubli, 花花, perfectionniste, la supplie tout de même de l'aider à corriger la valeur de $M_k$. 萱萱 confie donc cette tâche à son intelligence artificielle : vous.

Entrée

La première ligne du fichier d'entrée random.in contient un entier strictement positif $m$. La deuxième ligne donne la représentation binaire de $x$ (soit $m$ nombres, du bit de poids faible au bit de poids fort). La troisième ligne donne la représentation binaire de $M_0$ (dans le même ordre que pour $x$). La quatrième ligne contient un entier $type$.

Deux cas sont alors possibles :

  1. $type=0$ (萱萱 a noté la saisie de 花花) : la cinquième ligne contient un entier représentant la valeur correcte de $k$ notée par 萱萱.
  2. $type=1$ (萱萱 n'a pas pu noter la saisie de 花花) : la cinquième ligne contient $l$ et la sixième ligne donne la représentation binaire de la valeur erronée de $M_k$ calculée par 花花.

Sortie

Le fichier de sortie random.out doit contenir une seule ligne : une chaîne de $m$ bits, composée de 0 et de 1, représentant la valeur correcte de $M_k$ que vous avez trouvée (toujours du bit de poids faible au bit de poids fort).

Exemples

Entrée 1

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

Sortie 1

0101111001

Entrée 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

Sortie 2

0101111001

Exemple 3

Voir random/random.in et random/random.ans dans le répertoire du candidat.

Contraintes

Numéro du test $m$ $k$ $l$ $type$ $x$ est-il « bon » ?
1 $\le 10$ $\le 10^9$ N/A $0$ Oui
2 $\le 10$ $\le 10^9$ $\le 10$ $1$ Oui
3 $\le 100$ $\le 10^9$ N/A $0$ Oui
4 $\le 100$ $\le 10^9$ N/A $0$ Oui
5 $\le 100$ $\le 10^9$ N/A $0$ Oui
6 $\le 100$ $\le 10^5$ $=1$ $1$ Oui
7 $\le 100$ $\le 10^9$ $\le 10$ $1$ Oui
8 $\le 100$ $\le 10^9$ $\le 10$ $1$ Oui
9 $\le 100$ $\le 10^9$ $\le 10$ $1$ Oui
10 $\le 1000$ $\le 10^{18}$ $\le 10$ $1$ Oui
11 $\le 1000$ $\le 10^{18}$ $\le 10$ $1$ Oui
12 $\le 1000$ $\le 10^{18}$ $\le 10$ $1$ Oui
13 $\le 2000$ $\le 10^9$ N/A $0$ Oui
14 $\le 2000$ $\le 10^9$ N/A $0$ Oui
15 $\le 500000$ $\le 10^6$ N/A $0$ Non
16 $\le 500000$ $\le 10^6$ N/A $0$ Non
17 $\le 1000000$ $\le 10^6$ N/A $0$ Non
18 $\le 1000000$ $\le 10^6$ N/A $0$ Non
19 $\le 1000000$ $\le 10^6$ N/A $0$ Non
20 $\le 1000000$ $\le 10^6$ N/A $0$ Non

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.