soldați se așează în linie, de la stânga la dreapta. Fiecare soldat are un număr distinct de la la asociat. În fiecare dimineață sergentul responsabil vine și cheamă în față pe soldații corespunzători numerelor . Dacă aceștia nu se află chiar în ordinea pe toți cei soldați îi va aștepta o pedeapsă cruntă.
Sergentul, observând că cei soldați nu sunt așezați corect, va începe să ordoneze soldații. El îi va ordona pe cei soldați folosind interschimbări de soldați adiacenți. La fiecare pas va alege soldați aflați în ordine consecutivă (din cei ) și îi va obliga să își interschimbe pozițiile.
Sergentul este foarte eficient și îi va ordona pe soldații cu numerele folosind un număr minim de interschimbări, însă pentru fiecare astfel de interschimbare îi va obliga pe toți soldații să execute o flotare.
Astăzi sergentul este prea nervos și ocupat, și drept urmare vă roagă pe voi să îi spuneți câte flotări trebuie să execute cei soldați.
Detalii de implementare
Trebuie să implementați următoarea funcție:
long long minimum_swaps(std::vector<int> S, int K);
Funcția minimum_swaps
va fi apelată exact o dată pentru fiecare test. va conține ordinea celor soldați de la stânga la dreapta, iar va reprezenta numărul de soldați chemați în față. Se garantează că vectorul va conține exact o dată fiecare număr de la la și că .
Funcția trebuie să returneze un număr natural, reprezentănd câte flotări vor fi obligați să execute cei soldați pentru că nu au fost ordonați corespunzător.
Punctare
# | Punctaj | Restricții |
---|---|---|
1 | 21 | |
2 | 6 | |
3 | 5 | |
4 | 6 | |
5 | 37 | |
6 | 5 | |
7 | 20 |
Model de grader
Atenție! Acest grader nu este neapărat cel folosit pentru evaluarea submisiilor.
Vi se pune la dispoziție un grader pentru a vă putea compila și testa codul local. Acesta va citi de la consolă datele de intrare în următorul format:
- linia : , reprezentând numărul de soldați, respectiv numărul de soldați chemați în față.
- linia : (separate prin câte un spațiu)
Graderul va afișa în consolă răspunsul vostru, pe o singură linie, ca pe un număr întreg în baza .
Exemplul 1
stdin
6 3
6 1 5 2 4 3
stdout
0
Explicație
În primul exemplu, sergentul îi cheamă pe cei cu numerele , și . Din fericire aceștia se află deja în ordinea corectă așa că soldații nu sunt obligați să execute flotări.
Exemplul 2
stdin
6 5
6 1 5 2 4 3
stdout
4
Explicație
În al doilea exemplu, din cauza soldaților cu numerele și ordinea soldaților nu mai este corectă.
Sergentul îi poate aranja în felul următor folosind 4 interschimbări: .
Nu există nicio metodă de a aranja soldații cu numerele și folosind mai puțin de interschimbări.
Exemplul 3
stdin
7 4
4 5 1 7 2 6 3
stdout
6
Explicație
În cel de-al treilea exemplu, una din metodele de a ordona soldații cu numerele și folosind interschimbări este:
.