Diferente pentru problema/speculum intre reviziile #1 si #15

Diferente intre titluri:

speculum
Speculum

Diferente intre continut:

== include(page="template/taskheader" task_id="speculum") ==
Poveste şi cerinţă...
Se considera urmatorul caroiaj infinit, cu liniile si coloanele numerotate incepand cu 1:
 
     1 2 3 4 ...
   ---------
1 | *1 1 1 1* ...
2 | *2 1 1 2*
3 | *1 2 1 2* ...
4 | *2 2 1 1*
      ...
 
Construit in felul urmator:
 
Se incepe de la patratul cu de latura 1 ce contine pe pozitia *(1, 1)* valoarea *1*. La fiecare pas se dubleaza dimensiunea patratului in felul urmator:
 
*1.* Se completeaza in dreapta patratului curent un patrat de aceeasi dimensiune, care are coloanele cu aceeleasi valori ca si patratul initial, insa oglindite fata de dreapta verticala dintre aceste patrate. Mai exact daca primul patrat are coloanele *C{~1~}, C{~2~}, ... , C{~n-1~}, C{~n~}* patratul din dreapta lui va avea coloanele *C{~n~}, C{~n-1~}, ... C{~2~}, C{~1~}*.
 
*2.* Se completeaza in jos fata de patratul initial un alt patrat de aceeasi dimensiune, iar valorile din acest patrat se obtin *oglindind fata de orizontala liniile* patratului initial *si interschimband valorile 1 cu 2 si invers.* Mai precis, liniile initiale *L{~1~}, L{~2~}, ... , L{~n-1~}, L{~n~}* se scriu in ordinea *L{~n~}, L{~n-1~}, ... L{~2~}, L{~1~}* iar in locul fiecarei aparitii a lui 1 se asigneaza 2 si pentru 2 se asigneaza 1.
 
*3.* Se completeaza in dreapta - jos fata de patratul initial un nou patrat de aceeasi dimensiune care se obtine din patratul initial oglindind atat liniile (orizontal) cat si coloanele (vertical). Valorile raman neschimbate.
 
De exemplu la pasul al doilea avem patratul
*1 1*
*2 1*
 
si conform *1.* adaugam in dreapta lui patratul
*1 1*
*1 2* (acesta este patratul initial 'in oglinda', avand aceeleasi coloane dar in ordinea inversa),
 
si dedesupt, conform *2.*:
*1 2*
*2 2* (patratul initial oglindint orizontal, si cu valorile 1 si 2 interschimbate),
 
iar in dreapta - jos, conform *3.*:
*1 2*
*1 1* (patratul initial oglindit de doua ori, sau cel de la pasul *2.* oglindit a doua oara orizontal).
 
 
Pentru a rezolva problema trebuie sa raspundeti la cateva query-uri de forma *(x{~1~}, y{~1~}, x{~2~}, y{~2~})*, cu seminificatia: care este suma numerelor din caroiaj aflate in dreptunghiul cu colturile stanga-sus *(x{~1~}, y{~1~})* si dreapta-jos *(x{~2~}, y{~2~})*?
 
Coordonata x numeroteaza liniile iar y coloanele.
 
h2. Date de intrare
Fişierul de intrare $speculum.in$ ...
Fisierul de intrare $speculum.in$ contine pe prima linie numarul de query-uri *T*. Urmatoarele *T* linii contin cate 4 numere intregi : *x{~1~} y{~1~} x{~2~} y{~2~}.*
h2. Date de ieşire
În fişierul de ieşire $speculum.out$ ...
In fisierul de iesire $speculum.out$ afisati pe cate o linie cate un singur numar, raspunsul la query-uri in ordinea din fisierul de intrare.
h2. Restricţii
* $... ≤ ... ≤ ...$
* 1 ≤ T ≤ 20
* 1 ≤ x1 ≤ x2 ≤ 10^9^
* 1 ≤ y1 ≤ y2 ≤ 10^9^
h2. Exemplu
table(example). |_. speculum.in |_. speculum.out |
| This is some
  text written on
  multiple lines.
| This is another
  text written on
  multiple lines.
| 6
  1 1 1 2
  1 1 2 1
  2 2 4 4
  5 6 6 8
  12 2 16 4
  11512 62723 44722 85311
| 2
  3
  13
  9
  24
  1125326168
|
h3. Explicaţie
...
Testul 4 cere suma patratului definit de colturile (5, 6) si (6, 8). Acesta are valorile:
 
1 2 2
1 2 1
 
de suma 9.
== include(page="template/taskfooter" task_id="speculum") ==

Nu exista diferente intre securitate.

Diferente intre topic forum:

 
9833