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 |