Xorshift+ ennustamine | 프로그래밍의 벗 PivotOJ
PivotOJ

Xorshift+ ennustamine

시간 제한: 1000ms메모리 제한: 1024MB출처: EIO 2016-17 openBOJ 30006

문제

Vaatleme pseudojuhuslike arvude generaatorit:

  function xorshift()
    last_value = internal_value
    for i = 1 to M do
      if S[i] < 0 then
        internal_value = internal_value ^ (internal_value >> -S[i])
      else
        internal_value = internal_value ^ (internal_value << S[i])
    return last_value + internal_value

kus

  • last_value on NN-bitine lokaalne muutuja;
  • internal_value on NN-bitine globaalne muutuja, mille algväärtus ei ole teada;
  • S on globaalne MM-elemendiline konstantide massiiv, mille väärtused on teada;
  • ^ tähistab bitikaupa välistava või tehet (XOR); selle tehte tulemuses on 00 need bitid, kus operandide vastavad bitid on võrdsed, ja 11 need, kus operandide vastavad bitid on erinevad; näiteks 1012=610 \mathbin{<code>^</code>} 12 = 6, sest arvu 1010 kahendkuju on 1010 ja arvu 1212 kahendkuju 1100; seega peab tehte tulemus olema 0110, mis on arvu 66 kahendkuju;
  • << ja >> tähistavad bitikaupa vasakule ja paremale nihutamise tehteid; NN-bitise arvu ss biti võrra vasakule nihutamisel kustutatakse arvu kahendkujust ss vasakpoolsemat bitti ja lisatakse paremale ss bitti väärtusega 00; näiteks 44-bitise muutuja korral 62=86 \mathbin{<code><<</code>} 2 = 8, sest 66 kahendkuju on 0110, millest 22 vasaku biti kustutamisel saame 10 ja sellele paremale kahe 00-biti lisamisel 1000, mis on arvu 88 kahendkuju; paremale nihutamisel kustutatakse bitte paremalt ja lisatakse vasakule;
  • + tähistab liitmist, kus tulemusest kasutatakse ainult NN parempoolsemat bitti;
  • internal_value algväärtus ei ole 00 ja S elementide väärtused on sellised, et funktsiooni xorshift lõpmatult välja kutsudes omandab internal_value kõik väärtused 12N11 \ldots 2^N-1.

Kirjutada program, mis saab KK järjestikust funktsiooni xorshift tagastatud väärtust ja leiab nende põhjal järgmisena tagastatava väärtuse.

입력

Tekstifaili esimesel real on kolm täisarvu NN (2N642 \le N \le 64), MM (2M102 \le M \le 10) ja KK (100K200000100 \le K \le 200\,000). Faili teisel real on MM täisarvu SiS_i (1NSiN11-N \le S_i \le N-1). Faili kolmandal real on KK täisarvu VjV_j (1Vj<2N1 \le V_j < 2^N), funktsiooni xorshift väärtused KK järjestikusel väljakutsel.

출력

Tekstifaili ainsale reale väljastada üks täisarv, funktsiooni xorshift järgmisel väljakutsel tagastatav väärtus.

예제

예제 1

입력
2 2 100
-1 1
0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0 1 3 0
출력
1
코드를 제출하려면 로그인하세요.