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_valueon -bitine lokaalne muutuja;internal_valueon -bitine globaalne muutuja, mille algväärtus ei ole teada;Son globaalne -elemendiline konstantide massiiv, mille väärtused on teada;^tähistab bitikaupa välistava või tehet (XOR); selle tehte tulemuses on need bitid, kus operandide vastavad bitid on võrdsed, ja need, kus operandide vastavad bitid on erinevad; näiteks , sest arvu kahendkuju on1010ja arvu kahendkuju1100; seega peab tehte tulemus olema0110, mis on arvu kahendkuju;<<ja>>tähistavad bitikaupa vasakule ja paremale nihutamise tehteid; -bitise arvu biti võrra vasakule nihutamisel kustutatakse arvu kahendkujust vasakpoolsemat bitti ja lisatakse paremale bitti väärtusega ; näiteks -bitise muutuja korral , sest kahendkuju on0110, millest vasaku biti kustutamisel saame10ja sellele paremale kahe -biti lisamisel1000, mis on arvu kahendkuju; paremale nihutamisel kustutatakse bitte paremalt ja lisatakse vasakule;+tähistab liitmist, kus tulemusest kasutatakse ainult parempoolsemat bitti;internal_valuealgväärtus ei ole jaSelementide väärtused on sellised, et funktsioonixorshiftlõpmatult välja kutsudes omandabinternal_valuekõik väärtused .
Kirjutada program, mis saab järjestikust funktsiooni xorshift tagastatud väärtust ja leiab nende põhjal järgmisena tagastatava väärtuse.
입력
Tekstifaili esimesel real on kolm täisarvu (), () ja (). Faili teisel real on täisarvu (). Faili kolmandal real on täisarvu (), funktsiooni xorshift väärtused 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
코드를 제출하려면 로그인하세요.