xor

Time limit: 0.08s Memory limit: 32MB Input: xor.in Output: xor.out

Lui Hadrianus îi plac matricele infinite care sunt generate după o anumită regulă. Înainte de primul baraj, el se gândeşte la o astfel de matrice, în care elementul de pe linia ii şi coloana jj este egal cu ii xor jj. Hadrianus doreşte să determine suma elementelor pentru unele submatrici ale matricii formate după regula de mai sus.

Se numeşte submatrice de coordonate (L1,C1,L2,C2)(L_1, C_1, L_2, C_2), cu 1L1L21 \leq L_1 \leq L_2 şi 1C1C21 \leq C_1 \leq C_2, o zonă dreptunghiulară din matrice care are colţul stânga-sus pe linia L1L_1 şi coloana C1C_1 şi colţul dreapta-jos pe linia L2L_2 şi coloana C2C_2.

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, 2020 xor 1414 = 2626. Matricea formată are primele elemente conform figurii alăturate.

Cerinţă

Scrieţi un program care citeşte coordonatele a TT submatrice şi afişează pentru fiecare dintre aceste submatrice suma elementelor sale modulo PP (restul împărţirii sumei la PP), unde PP este un număr prim.

Date de intrare

Fişierul de intrare xor.in conţine pe prima linie TT şi PP, cu semnificaţia de mai sus. Fiecare din următoarele TT linii conţine câte 44 numere naturale L1 C1 L2 C2L_1 \ C_1 \ L_2 \ C_2, despărţite printr-un spaţiu, reprezentând coordonatele unei submatrice.

Date de iesire

Fişierul de ieşire xor.out conţine exact TT linii. Linia cu numărul ii conţine suma modulo PP a elementelor celei de a ii-a submatrice din fişierul de intrare.

Restricții și precizări

  • 1T20 0001 \leq T \leq 20 \ 000
  • Pentru fiecare submatrice din cele TT, 1L1L21081 \leq L_1 \leq L_2 \leq 10^8 şi 1C1C21081 \leq C_1 \leq C_2 \leq 10^8
  • PP este număr prim mai mic sau egal decât 30 00030 \ 000
  • Liniile şi coloanele matricei sunt numerotate începând cu 11
  • La evaluare se vor folosi 1010 teste.
    • Pentru primele 22 teste, T100T \leq 100 şi L2,C2100L_2, C_2 \leq 100
    • Pentru testele 33 şi 44, L2,C21 000L_2, C_2 \leq 1 \ 000
    • Pentru testele 55 şi 66, L1=L2L_1 = L_2
    • Pentru testele 77 şi 88, P=2P = 2
    • Celelalte două teste respectă limitele de mai sus şi nu au nicio particularitate specială

Exemplu

xor.in

5 29473
1 3 2 4
2 2 12 15
10000 10000 11000 11000
123 51 54667341 1878099
1234567 1234567 1234678 1234678

xor.out

14
1165
23799
18591
549

Explicație

Prima submatrice este formată din elementele 22, 55, 11 şi 66. Suma modulo 29 47329 \ 473 a acestor elemente este: (2+5+1+6) % 29 473=14(2 + 5 + 1 + 6) \ \% \ 29 \ 473 = 14.

Log in or sign up to be able to send submissions!