Mai intai trebuie sa te autentifici.
Diferente pentru problema/aiacuxor intre reviziile #14 si #3
Nu exista diferente intre titluri.
Diferente intre continut:
Bulănel nu a fost atent la ora de informatică şi drept urmare a înţeles prost tema primită. Fiindcă nu e în stare să o facă, vă cere vouă ajutorul. Bulănel are un şir $V$ cu $N$ elemente. Fie $f(i,j)$= suma xor a elementelor subsecvenţei determinate de poziţiile cuprinse între $[i,j]$, $i≤j$ ( $V(i) xor V(i+1) xor … xor V(j)$ ). Bulănel e curios să afle care este suma xor a valorilor returnate de funcţia **f** pentru toate subsecvenţele din şirul V cu lungimea cuprinsă între $[X, Y] (X≤Y)$. Deoarece e curios Bulănel vă pune $Q$ astfel de întrebări.
Având în vedere că Bulănel stă prost cu cititul, veţi construi voi şirul $V$ pe baza unui şir auxiliar $S$ de lungime $M$, cu elemente numerotate de la $0$ la $M-1$. Elementul de pe fiecare poziţie $i, 0 ≤ i < N$, din vectorul $V$ va fi calculat cu următoarea formulă: == code(cpp) | V[i] = (S[i / M] xor S[i mod M]) + i, unde x / y reprezintă câtul împărţirii lui x la y, x mod y reprezintă restul lui x la împărţirea cu y, şi x xor y reprezintă rezultatul operaţiei xor (sau exclusiv pe biţi) dintre x şi y. == De asemenea şi întrebările se generează în felul următor: ştiind prima intrebare $X Y$, următoarele perechi $X Y$ se afla după procedeul: == code(cpp) | X_nou = (X * A + Y * B) mod N + 1 Y_nou = (Y * C + (Z mod N) * D) mod N + 1, (unde Z reprezintă răspunsul ultimei întrebări iar A, B, C, D sunt nişte constante date în fişierul de intrare) daca X_nou > Y_nou: interschimba X_nou, Y_nou_$ X = X_nou Y = Y_nou ==
Având în vedere că Bulănel stă prost cu cititul, vă dă la dispoziţie un şir auxiliar $S$ de lungime $M$, indexat de la $0$ la $M-1$, cu ajutorul căruia vă veţi construi şirul $V$. Elementul de pe fiecare poziţie $i, 0 ≤ i < N$, din vectorul $V$ va fi calculat cu următoarea formulă: $_V[i] = (S[i / M] xor S[i mod M]) + i_$, unde $x / y$ reprezintă câtul împărţirii lui $x$ la $y$, $x$ $mod$ $y$ reprezintă restul lui $x$ la împărţirea cu $y$, şi $x xor y$ reprezintă rezultatul operaţiei $xor$ (sau exclusiv pe biţi) dintre $x$ şi $y$. De asemenea şi întrebările se generează în felul următor: ştiind prima intrebare $X Y$ următoarele perechi $X_nou, Y_nou$ se afla după formulele: $_X_nou=(X * A + Y * B) mod N + 1_$ $_Y_nou=(Y * C + (Z mod N) * D) mod N + 1_, (unde Z reprezintă răspunsul ultimei întrebări iar A, B, C, D sunt nişte constante date în fişierul de intrare)$ $_daca X_nou > Y_nou:_$ $_interschimba X_nou, Y_nou_$ $_X = X_nou_$ $_Y = Y_nou_$
h2. Cerinta
* $1 ≤ X ≤ Y ≤ N ≤ 1000000$ * $1 ≤ Q ≤ 1000000$
* $1 ≤ M ≤ 1000, N ≤ M * M$
* Pentru $20$ de puncte $1 ≤ N , Q ≤ 100$ * Pentru alte $20$ de puncte $1 ≤ N ≤ 1000 si 1 ≤ Q ≤ 100$
* Pentru alte $15$ de puncte $1 ≤ N ≤ 10000 si 1 ≤ Q ≤ 100$
* Pentru alte $20$ de puncte $1 ≤ N ≤ 10000 si 1 ≤ Q ≤ 100$
* Elemente şirului $V$ încap pe $32$ de biti * $1 ≤ S[i] < 2^29$ * $0 ≤ A,B,C,D ≤ 10^3$ * O subsecvenţă este un subşir de elemente care apar pe poziţii consecutive în şirul iniţial
*Operaţia $xor$reprezintă operaţiade disjuncţieexclusivărealizată pe biţiioperanzilor.ÎnPascal,operatorulcorespunzătoreste $xor$, iar înC/C++acest operator este $^$. De exemplu, $20 xor 14 = 26$.
* xor reprezintă operatorul binar „sau exclusiv” xor (Pascal) / ^ (C/C++)
* Modul de generare al şirului, respectiv a întrebărilor, se datorează doar faptului că Bulănel citeşte foarte greu. * Problema va fi evaluată pe teste în valoare de $90$ de puncte * Se vor acorda $10$ puncte din oficiu
| Sirul V de lungime N = 4 : 0 3 2 5 Cele 4 intrebari sunt: 1 1
22
1 2
2 3 3 4 Vom explica în detaliu răspunsul pentru ultima întrebare: