URI Online Judge | 3110

Farcos e o Xorshift

Por Francisco Elio Parente Arcos Filho, UEA BR Brazil

Timelimit: 2

Os geradores numéricos aleatórios Xorshift são uma classe de geradores numéricos pseudo-aleatórios que foi descoberta por George Marsaglia. Eles têm uma implementação particularmente eficiente sem usar excessivamente polinômios esparsos. Eles geram o próximo número na sequência repetidamente pegando o ou-exclusivo de um número com uma versão de si mesmo com os bits deslocados. Isto os faz extremamente rápidos nas arquiteturas modernas.

Em uma tentativa de criar sua própria criptografia, Farcos converteu uma mensagem em um array de inteiros de 64 bits e aplicou o ou-exclusivo em cada elemento Ei com o Ki-ésimo elemento de uma sequência Xorshift a qual usa S como semente. Em outras palavras, um array E foi criado tal que:

UOJ_3110_E_a

E também:

UOJ_3110_E_b

Os trechos de código mostrados estão implementados em c++.

Fornecidos os arrays E e K, mais a semente S, faça um programa capaz de decifrar o array original D.

Entrada

A primeira linha da entrada contém cinco inteiros: N (0 < N ≤ 102), a quantidade de elementos nos arrays; S (0 < S < 264), a semente para o Xorshift; A, B e C (0 < A, B, C < 64), os parâmetros do Xorshift mostrados no código.

A segunda linha da entrada possui N inteiros Ei (0 < Ei < 264) separados por um espaço em branco.

A terceira linha da entrada possui N inteiros Ki (0 < Ki < 264) separados por um espaço em branco.

Saída

A saída consiste de uma única linha contendo N inteiros Di separados por um espaço em branco e representando o array decifrado.

Exemplos de Entrada Exemplos de Saída

3 49 63 62 63
48 49 50
98 57 22

1 2 3

4 1 1 2 3
31 80255 345 7119
1 4 2 3

4 31396 79 1947