Alexa cumpărat pentru pisica sa ghemotoace de culori diferite. În fiecare zi din următoarele , pisica va alege perechi de ghemotoace adiacente cu care să se joace, și va interschimba pozițiile ghemotoacelor din fiecare pereche. Alex, știe culorile ghemotoacelor care au fost interschimbate, dar nu și ordinea în care s-au realizat interschimbările. Astfel el vă cere să găsiți ordinea în care se află ghemotoacele în fiecare zi.
Culorile sunt codificate prin numere naturale de la la . Inițial, ghemotoacele sunt sortate crescător
după acest indice al culorii.
Răspunsul pentru fiecare zi va fi dat sub forma unui cod reținut într-o variabilă de tip unsigned long
long și obținut din următoarea formulă: () modulo , unde înseamnă culoarea ghemotocului de pe poziția .
Protocol de interacțiune
Concurentul va implementa funcția init
, cu următoarea semnătura:
void init (int n, int nrTestCase);
Prin intermediul acestei funcții vei primi numărul și numărul testului actual.
De asemenea, concurentul va implementa și funcția makeSwaps
, cu următoarea semnătura.
unsigned long long makeSwaps (int q, int a[], int b[]);
Paramtetrii acestei funcții au următorul sens:
- este numărul de perechi de ghemotoace care sunt interschimbate
- și doi vectori de elemente care descriu perechile de culori care trebuie interschimbate. Perechea (cu de la la ) este (, ). Se garantează că . Ordinea celor două numere în cadrul perechii este aleatoare. Perechile acestea sunt date într-o ordine nu neapărat identică cu cea în care au fost realizate interschimbările de către pisică.
Funcția va întoarce rezultatul cerut în problemă. Concurentul trebuie să nu implementeze funcția main
.
Restricții și precizări
- Funcția
init
va fi apelată o singură dată la începutul programului. - A se observa că numărul nu este dat ca parametru în funcția
init
. El rămâne necunoscut programului concurenților. Cu toate acestea, el se află în fișierul de intrare. - Funcția
makeSwaps
va fi apelată de ori, iar în cadrul unui apel al acestei funcții orice pereche (neordonată) de culori apare cel mult o singură dată. - Punctarea se va face separat, testele fiind independente unul de altul
- Primul test () are proprietatea că perechile sunt date în ordinea în care s-au efectuat interschimbările. Acest test valorează puncte.
- Următoarele teste respectă următoarele restricții: și . Aceste teste valoreaza câte puncte.
- Următoarele teste respectă următoarele restricții: . Aceste teste valorează puncte.
- Următoarele teste respectă următoarele restricții: Aceste teste valorează puncte.
- pentru toate testele.
Exemplul 1
ghemotoace.in
4 2 -1
2
1 2
1 3
4
4 3
2 4
3 2
1 4
ghemotoace.out
25948
50302
Explicație
(acest test nu se află printre cele folosite la evaluare)
Pentru prima zi:
Observați că secvența este greșită deoarece elementele și nu sunt adiacente când sunt interschimbate.
Pentru a doua zi: