Cerință
Se consideră două numere naturale nenule și . Un șir de numere naturale conține numere de la la . Fiecare valoare de la la 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):
- = numărul testului
- = numărul de elemente din șir
- = un șir conținând cele 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  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  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  ș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 | exemplu | |||
| 1 | șirul e o permutare | (grupa cu ) | ||
| 2 | șirul e o permutare | (grupa cu ) | ||
| 3 | șirul e o permutare | (grupa cu ) | ||
| 4 | șirul e o permutare | (grupa cu ) | ||
| 5 | șirul e o permutare | (grupa cu ) | ||
| 6 | șirul e o permutare | (grupa cu ) | ||
| 7 | șirul conține doar elementele și | (grupa cu ) | ||
| 8 | șirul conține doar elementele și | (grupa cu ) | ||
| 9 | șirul e o permutare | (grupa cu ) | ||
| 10 | șirul e o permutare | (grupa cu ) | ||
| 11 | - | (grupa cu ) | ||
| 12 | - | (grupa cu ) | ||
| 13 | șirul e o permutare | (grupa cu ) | ||
| 14 | șirul e o permutare | (grupa cu ) | ||
| 15 | - | (grupa cu ) | ||
| 16 | - | (grupa cu ) | 
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:
-  (max ) apeluri ale funcției Ask
-  (max ) apeluri ale funcției Ask
 Verdictele de mai sus nu garantează corectitudinea răspunsului găsit
 
-  (max ) apeluri ale funcției 
Exemplu
| Acțiune | Explicaţie | 
|---|---|
| Solve(0, 4, {1,2,3,4}) | Șirul care trebuie reconstituit este | 
| Ask({1,2,3,4}) | Returnează (swap () – {}, swap () – {}, swap – {} | 
| Ask({2,4,3,1}) | Returnează (swap () – {}, swap () – {}, swap – {} | 
| GiveSolution ({3,2,1,4}) | Șirul reconstituit este |