anagrame

Time limit: 0.06s Memory limit: 512MB Input: anagrame.in Output: anagrame.out

Cerință

Se consideră două numere naturale nenule NN și K(K≤N)K (K \leq N). Un șir de NN numere naturale conține numere de la 11 la KK. Fiecare valoare de la 11 la KK apare în șir cel puțin o dată. Se cunosc elementele șirului, dar nu și ordinea acestora.

Se cere să reconstituiți șirul folosind anumite informații despre acesta.

Va trebui să implementați o funcție

void Solve(int NrTest, int N, int *S)

Graderul comisiei va apela funcția o singură dată și va transmite prin intermediul parametrilor următoarele informații (vezi tabelul de restricții de mai jos):

  • NrTestNrTest = numărul testului
  • NN = numărul de elemente din șir
  • SS = un șir conținând cele NN elemente ale șirului căutat în ordine crescătoare.

În funcția Solve veți apela următoarele funcții puse la dispoziție de graderul comisiei.

int Ask(int *X)

transmite prin parametrul XX un șir conținând elementele șirului căutat într-o ordine aleasă de voi și returnează numărul minim de swap-uri între elemente de pe poziții consecutive care pot fi aplicate pe șirul XX pentru a-l transforma în șirul cerut.
Această funcție poate fi apelată de un număr limitat de ori (conform tabelului de restricții).

void GiveSolution(int *X)

transmite prin parametrul XX șirul căutat. Această funcție va fi apelată o singură dată la final, după toate apelurile funcției Ask.

Restricții și precizări

NrTest N Nr.max apeluri Observatii Punctaj
0 222^2 2424 exemplu 00
1 242^4 282^8 șirul e o permutare 77 (grupa cu 22)
2 252^5 2102^{10} șirul e o permutare 77 (grupa cu 11)
3 252^5 25⋅5⋅22^5 \cdot 5 \cdot 2 șirul e o permutare 66 (grupa cu 44)
4 262^6 26⋅6⋅22^6 \cdot 6 \cdot 2 șirul e o permutare 66 (grupa cu 33)
5 262^6 26⋅62^6 \cdot 6 șirul e o permutare 1414 (grupa cu 66)
6 272^7 27⋅72^7 \cdot 7 șirul e o permutare 1414 (grupa cu 55)
7 292^9 29⋅22^9 \cdot 2 șirul conține doar elementele 11 și 22 1111 (grupa cu 88)
8 2102^{10} 210⋅22^{10} \cdot 2 șirul conține doar elementele 11 și 22 1111 (grupa cu 77)
9 292^9 29⋅22^9 \cdot 2 șirul e o permutare 1919 (grupa cu 1010)
10 2102^{10} 210⋅22^{10} \cdot 2 șirul e o permutare 1919 (grupa cu 99)
11 292^9 29⋅22^9 \cdot 2 - 1818 (grupa cu 1212)
12 2102^{10} 210⋅22^{10} \cdot 2 - 1818 (grupa cu 1111)
13 292^9 292^9 șirul e o permutare 1111 (grupa cu 1414)
14 2102^{10} 2102^{10} șirul e o permutare 1111 (grupa cu 1313)
15 292^9 292^9 - 1414 (grupa cu 1616)
16 2102^{10} 2102^{10} - 1414 (grupa cu 1515)

Observații referitoare la verdictele de evaluare

  • Dacă numărul de apeluri depășește valoarea maximă alocată pe test, puteți primi unul dintre următoarele verdicte:
    • 400400 (max 100100) apeluri ale funcției Ask
    • >500> 500 (max 100100) apeluri ale funcției Ask
      Verdictele de mai sus nu garantează corectitudinea răspunsului găsit

Exemplu

Acțiune Explicaţie
Solve(0, 4, {1,2,3,4}) Șirul care trebuie reconstituit este {3,2,1,4}\{3,2,1,4\}
Ask({1,2,3,4}) Returnează 33 (swap (2,32,3) – {1,3,2,41,3,2,4}, swap (1,31,3) – {3,1,2,43,1,2,4}, swap (1,2)(1,2) – {3,2,1,43,2,1,4}
Ask({2,4,3,1}) Returnează 33 (swap (4,34,3) – {2,3,4,12,3,4,1}, swap (2,32,3) – {3,2,4,13,2,4,1}, swap (4,1)(4,1) – {3,2,1,43,2,1,4}
GiveSolution ({3,2,1,4}) Șirul reconstituit este {3,2,1,4}\{3,2,1,4\}

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