1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

void swap_kk(int a, int b, vector<int>& array) {
    if (a != b) {
        array[a] += array[b];
        array[b] = array[a] - array[b];
        array[a] -= array[b];
    }
}
bool sprawdzUstawienie(int liczbaButelekSkrajnieLewych, vector<int> &polka) {
    vector<int> odwiedzone;
    for (int i = 0; i < liczbaButelekSkrajnieLewych; i++) {
        if (find(odwiedzone.begin(), odwiedzone.end(), polka[i]) != odwiedzone.end()) {
            return true;
        }
        odwiedzone.push_back(polka[i]);
    }
    return false;
}

int main() {
    int liczbaButelekNaPolce, liczbaButelekSkrajnieLewych;
    cin >> liczbaButelekNaPolce >> liczbaButelekSkrajnieLewych;
    vector<int> polka;
    for (int i = 0; i < liczbaButelekNaPolce; i++) {
        int butelka;
        cin >> butelka;
        polka.push_back(butelka);
    }
    int przesuniecia = 0;
    vector<int> odwiedzone;
    odwiedzone.push_back(polka[0]);
    while (sprawdzUstawienie(liczbaButelekSkrajnieLewych, polka) && przesuniecia != -1) {
        for (int i = 0; i < polka.size(); i++) {
            if (find(odwiedzone.begin(), odwiedzone.end(), polka[i]) != odwiedzone.end()) {
                if (i != polka.size() - 1) {
                    continue;
                } else if (sprawdzUstawienie(liczbaButelekSkrajnieLewych, polka)) {
                    przesuniecia = -1;
                    break;
                }
            } else {
                odwiedzone.push_back(polka[i]);
                for (int j = i; j >= odwiedzone.size(); j--) {
                    iter_swap(polka.begin() + j, polka.begin() + j - 1);
                    przesuniecia++;
                }
            }
        }
    }
    cout << przesuniecia;
    return 0;
}