Diferente pentru problema/aiacuxor intre reviziile #6 si #14

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ă:
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_nou, Y_nou$ se afla după formulele:
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)
* $1 &le; X &le; Y &le; N &le; 1000000$
* $1 &le; Q &le; 1000000$
* $1 &le; M &le; 1000, N &le; M * M$
* Pentru $20$ de puncte $1 &le; N , Q &le; 100$
* Pentru alte $20$ de puncte $1 &le; N &le; 1000 si 1 &le; Q &le; 100$
* Pentru alte $20$ de puncte $1 &le; N &le; 10000 si 1 &le; Q &le; 100$
* Pentru alte $15$ de puncte $1 &le; N &le; 10000 si 1 &le; Q &le; 100$
* Elemente şirului $V$ încap pe $32$ de biti
* $1 &le; S[i] < 2^29$
* $0 &le; A,B,C,D &le; 10^3$
* O subsecvenţă este un subşir de elemente care apar pe poziţii consecutive în şirul iniţial
* xor reprezintă operatorul binar sau exclusiv xor (Pascal) / ^ (C/C++)
* Operaţia $xor$ reprezintă operaţia de disjuncţie exclusivă realizată pe biţii operanzilor. În Pascal, operatorul corespunzător este $xor$, iar în C/C++ acest operator este $^$. De exemplu, $20 xor 14 = 26$.
* 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
1 2
2 2
2 3
3 4
Vom explica în detaliu răspunsul pentru ultima întrebare:

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.