anagrame

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

Cerință

Se consideră două numere naturale nenule NN și K(KN)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 25522^5 \cdot 5 \cdot 2 șirul e o permutare 66 (grupa cu 44)
4 262^6 26622^6 \cdot 6 \cdot 2 șirul e o permutare 66 (grupa cu 33)
5 262^6 2662^6 \cdot 6 șirul e o permutare 1414 (grupa cu 66)
6 272^7 2772^7 \cdot 7 șirul e o permutare 1414 (grupa cu 55)
7 292^9 2922^9 \cdot 2 șirul conține doar elementele 11 și 22 1111 (grupa cu 88)
8 2102^{10} 21022^{10} \cdot 2 șirul conține doar elementele 11 și 22 1111 (grupa cu 77)
9 292^9 2922^9 \cdot 2 șirul e o permutare 1919 (grupa cu 1010)
10 2102^{10} 21022^{10} \cdot 2 șirul e o permutare 1919 (grupa cu 99)
11 292^9 2922^9 \cdot 2 - 1818 (grupa cu 1212)
12 2102^{10} 21022^{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!