Répartition Divine – Qualification 2024

Niveau 6 ⋅ Validation weight: 10%

Énoncé

$N$ dieux veulent se répartir le contrôle des villes parmi $V$ villes existantes. Les dieux sont numérotés de $0$ à $N-1$, et les villes de $0$ à $V-1$. Chaque dieu possède une certaine affection pour chaque ville, indiquée dans un tableau $\mathtt{villes}$. Pour chaque dieu, il vous est donné une chaîne binaire de taille $V$: le caractère en position $i$ vaut 1 si le dieu veut contrôler la ville $i$, et 0 sinon.

Lorsque certaines villes parmi les $V$ villes sont abandonnées, alors deux dieux vont tenter de se répartir équitablement leur contrôle. Cependant, il peut y avoir des villes dites contestées dont les deux dieux veulent le contrôle. Si le nombre de villes contestées est pair, alors pas de problème, les dieux peuvent se les répartir équitablement. Mais si ce nombre est impair, ils se battront inévitablement.

Alors, pour un certain sous-ensemble de villes abandonnées, on dit que deux dieux sont compatibles si le nombre de villes contestées par les deux dieux dans ce sous-ensemble est pair.

Étant donné un sous-ensemble $S$ de villes dites abandonnées, et un entier $\Delta$, on appelle alors $R(S, \Delta)$ le nombre de $X$ tels que les dieux $X$ et $X \oplus \Delta$ sont compatibles, où $\oplus$ représente l'opération "ou exclusif" au niveau du bit.

Afin d'évaluer l'animosité générale chez les dieux, Jøsëf Marchand doit alors répondre à $R$ requêtes. Chaque requête prend la forme d'un sous-ensemble de villes $S$, auquel Jøsëf Marchand devra répondre en appelant la fonction Hashe avec, consécutivement, toutes les valeurs de $R(S, \Delta)$ pour toutes les valeurs possibles de $\Delta$ entre 1 et $N-1$.

La fonction Hashe est donnée en pseudo-code ci-dessous :

1
2
3
4
5
Hashe(valeur) {
    X = (X * valeur + Z + 37) % 1000 000 007;
    Y = (X * 13 + 36 * Y + 257) % 1000 000 009;
    Z = (Y * valeur + 4 * valeur + X * X + 7) % 998 244 353;
}

Faites attention aux dépassements entier ! En C++ par exemple, il faut utiliser un type d'entier 64 bits, tel que long long.

Les valeurs de X, Y et Z sont initialisées à 0 au début de l'exercice et ne sont jamais réinitialisées. Après chaque requête, Jøsëf Marchand doit afficher les nouvelles valeurs de X, Y et Z.

Aidez Jøsëf Marchand à répondre à toutes ces requêtes.

Entrée

L’entrée contiendra :

  • Sur la première ligne, un entier : V, le nombre de villes.
  • Sur la ligne suivante, un entier : N, le nombre de dieux.
  • Sur les lignes suivantes, une liste de N éléments : villes, pour chaque dieu, une chaîne de caractère binaire. Si le dieu veut le contrôle de la ville $i$, un 1 est présent dans la chaîne de caractère à la position $i$, un 0 sinon.
    • Une ligne par élément de la liste : une liste de V caractères juxtaposés.
  • Sur la ligne suivante, un entier : R, le nombre de requêtes.
  • Sur les lignes suivantes, une liste de R éléments : requetes, pour chaque requête, une chaîne de caractère binaire représentant un sous-ensemble de villes. Si la ville $i$ est présente dans le sous-ensemble, alors un 1 est présent dans la chaîne de caractère à la position $i$, un 0 sinon.
    • Une ligne par élément de la liste : une liste de V caractères juxtaposés.

Sortie

Initialisez X, Y et Z à 0.

Pour chaque requête $S$ : appelez la fonction Hashe avec toutes les valeurs de $R(S, \Delta)$, pour toutes les valeurs de $\Delta$ entre $1$ et $N - 1$, puis affichez, sur une ligne et séparés par un espace, les nouvelles valeurs de X, Y et Z.

Contraintes

  • $1 \le V \le 5$
  • $2 \le N \le 16$
  • $1 \le R \le 16$
  • $N$ est toujours une puissance de deux

Contraintes de performance

  • $1 \le V \le 13$
  • $2 \le N \le 8\,192$
  • $1 \le R \le 8\,192$
  • $N$ est toujours une puissance de deux

Contraintes d'exécution

Utilisation mémoire maximum
400000 kilo-octets
Temps d'exécution maximum
5000 millisecondes

Exemples d'entrée/sortie

Exemple d'entrée
3
8
100
010
101
111
000
001
101
011
4
100
111
011
110
Exemple de sortie
484820768 206380747 402838276
794197874 947000107 143480926
548437971 267269086 269652611
585655789 82295263 23580903
Commentaire

Ici, huit dieux veulent se répartir trois villes.

Ce tableau décrit pour chaque dieu les villes dont il souhaite le contrôle. Un indique que le dieu veut contrôler la ville, et un est affiché dans le cas contraire.

Villes   0 1 2
Dieu 0
Dieu 1
Dieu 2
Dieu 3
Dieu 4
Dieu 5
Dieu 6
Dieu 7

Lors de la première requête, nous avons $S = \{0\}$, c'est à dire que seule la ville 0 est abandonnée et prise en considération. Calculons par exemple la valeur de $R(S, \Delta)$ pour $\Delta = 1$. Comme $\Delta = 1$, ces quatre paires de dieux sont vérifiées :

  • 0 — 1 est une paire de dieux compatible, car seul 0 veut contrôler la ville considérée.
  • 2 — 3 n'est pas une paire compatible, car ils veulent tous les deux contrôler la ville. Comme il n'y a qu'une ville qui est contestée, ils se battront pour l'avoir.
  • 4 — 5 est une paire compatible, car aucun des deux dieux ne veut le contrôle de la ville.
  • 6 — 7 est une paire compatible, car seul le dieu 6 veut le contrôle de la ville considérée.

Il y a donc 6 valeurs de X (0, 1, 4, 5, 6 et 7) qui indiqueront une paire compatible, on a donc $R(S, \Delta) = 6$ dans ce cas.

Pour $S = \{0\}$, on obtient les valeurs suivantes de $R$:

  • $R(S, 1) = 6$
  • $R(S, 2) = 6$
  • $R(S, 3) = 6$
  • $R(S, 4) = 6$
  • $R(S, 5) = 6$
  • $R(S, 6) = 6$
  • $R(S, 7) = 8$

Il faut donc appeler dans cet ordre : Hashe(6), Hashe(6), ..., Hashe(8). Après avoir effectué ces 7 appels, on obtient :

  • $X = 484820768$
  • $Y = 206380747$
  • $Z = 402838276$

Lors de la seconde requête, nous avons $S = \{0, 1, 2\}$, donc les trois villes sont considérées. Calculons par exemple la valeur de $R(S, \Delta)$ pour $\Delta = 2$. Comme $\Delta = 2$, quatre paires de dieux sont vérifiées :

  • 0 — 2 n'est pas une paire de dieux compatible, car ils se battront sur la ville 0 sans pouvoir se la répartir.
  • 1 — 3 n'est pas une paire de dieux compatible, car ils se battront sur la ville 1 sans pouvoir se la départager.
  • 4 — 6 est une paire compatible car seul le dieu 6 veut le contrôle des villes.
  • 5 — 7 n'est pas une paire compatible, car les deux dieux se battront pour la ville 2.

Seules deux valeurs de X ($X = 4$ et $X = 6$) indiqueront une paire compatible. On a alors $R(S, \Delta) = 2$.

Pour $S = \{0, 1, 2\}$, on obtient les valeurs suivantes de $R$:

  • $R(S, 1) = 6$
  • $R(S, 2) = 2$
  • $R(S, 3) = 4$
  • $R(S, 4) = 8$
  • $R(S, 5) = 6$
  • $R(S, 6) = 2$
  • $R(S, 7) = 6$

Il faut donc appeler dans cet ordre : Hashe(6), Hashe(2), ..., Hashe(6). Après avoir effectué ces 7 appels (sans avoir réinitialisé les valeurs de $X$, $Y$ et $Z$ au préalable), on obtient :

  • $X = 794197874$
  • $Y = 947000107$
  • $Z = 143480926$

Ensuite, la troisième requête indique $S = \{1, 2\}$, alors nous devons considérer uniquement les deux dernières villes. Calculons par exemple la valeur de $R(S, \Delta)$ pour $\Delta = 4$. Dans ce cas là, trois paires de dieux sont compatibles :

  • 0 — 4 n'ont aucune ville contestée en commun, et donc ne se battront pas
  • 1 — 5 n'ont aucune ville contestée en commun non plus, ils ne se battront pas
  • 2 — 6 se battront pour la ville 2, sans réussir à se la départager
  • 3 — 7 veulent tous deux les villes 1 et 2, mais comme le nombre de villes contestées est pair, ils se les départageront équitablement. Cette paire est donc compatible.

On a donc $R(S, \Delta) = 6$.

Pour $S = \{1, 2\}$, on obtient les valeurs suivantes de $R$:

  • $R(S, 1) = 4$
  • $R(S, 2) = 4$
  • $R(S, 3) = 6$
  • $R(S, 4) = 6$
  • $R(S, 5) = 4$
  • $R(S, 6) = 4$
  • $R(S, 7) = 6$
Exemple d'entrée
5
4
11111
10010
11100
01111
3
00110
11001
11111
Exemple de sortie
2002265 27656686 226435344
609856233 789880530 261123085
157520669 590314477 408682977
Commentaire

Pour la première requête, on considère uniquement les villes 2 et 3. Considérons par exemple $\Delta = 1$, formant les paires de dieux 0 — 1, 2 — 3.

Aucune de ces deux paires ne sont compatibles, car les dieux 0 et 1 se battront pour la ville 3, et les dieux 2 et 3 se battront pour la ville 2.

Alors, on obtient $R(S, 1) = 0$, et plus en général,

  • $R(S, 1) = 0$,
  • $R(S, 2) = 0$,
  • $R(S, 3) = 4$.

Après avoir initialisé $X$, $Y$, $Z$ à 0, on doit donc appeler, dans cet ordre, Hashe(0), Hashe(0), puis Hashe(4). On obtient alors les valeurs :

  • $X = 2002265$
  • $Y = 27656686$
  • $Z = 226435344$

Pour la seconde requête, on considère les villes 0, 1 et 4. Calculons par exemple la valeur de $R(S, \Delta)$ pour $\Delta = 3$, c'est à dire que nous étudions les paires de dieux 0 — 3, 1 — 2.

  • La paire 0 — 3 est compatible, car les deux dieux peuvent se répartir les villes 1 et 4
  • La paire 1 — 2 n'est pas compatible, car ils se battront pour la ville 0.

Alors, on trouve $R(S, 3) = 2$, et en général:

  • $R(S, 1) = 0$,
  • $R(S, 2) = 4$,
  • $R(S, 3) = 2$

En repartant des précédentes valeurs de $X$, $Y$, $Z$, on doit ensuite appeler, dans cet ordre, Hashe(0), Hashe(4), puis Hashe(2). On obtient alors les valeurs :

  • $X = 609856233$
  • $Y = 789880530$
  • $Z = 261123085$

Enfin, pour la troisième requête, on considère l'intégralité des villes. On a alors:

  • $R(S, 1) = 4$,
  • $R(S, 2) = 0$,
  • $R(S, 3) = 2$.