#include <bits/stdc++.h> #include <iostream> #include <vector> #include <map> #define MAX_SIZE 500001 using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n; cin >> k; vector<int> bottles(n); for (int i = 0; i < n; i++) { cin >> bottles[i]; } // Algorithm vector<int> duplicates(MAX_SIZE, 0); vector<int> duplicates_until_k; vector<int> unique_after_k; for (int i = 0; i < k; i++) { if (duplicates[bottles[i]] != 0) { duplicates_until_k.push_back(i); //cout << "d(" << i << ", " << bottles[i] << ") "; } duplicates[bottles[i]] = 1; } //cout << endl; for (int i = k; i < n; i++) { if (duplicates[bottles[i]] == 0) { unique_after_k.push_back(i); //cout << "u(" << i << ", " << bottles[i] << ") "; } duplicates[bottles[i]] = 1; } if (duplicates_until_k.size() > unique_after_k.size()) { cout << -1; } else { long result = 0; for (int i = duplicates_until_k.size() - 1, j = 0; i >= 0; i--, j++) { //cout << "r(" << result << "," << duplicates_until_k[i] << ", " << (k - 1 - j) << ") "; result += ((k - 1 - j) - duplicates_until_k[i]); result += (unique_after_k[j] - (k - 1 - j)); } cout << result; } return 0; }
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 58 59 60 | #include <bits/stdc++.h> #include <iostream> #include <vector> #include <map> #define MAX_SIZE 500001 using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, k; cin >> n; cin >> k; vector<int> bottles(n); for (int i = 0; i < n; i++) { cin >> bottles[i]; } // Algorithm vector<int> duplicates(MAX_SIZE, 0); vector<int> duplicates_until_k; vector<int> unique_after_k; for (int i = 0; i < k; i++) { if (duplicates[bottles[i]] != 0) { duplicates_until_k.push_back(i); //cout << "d(" << i << ", " << bottles[i] << ") "; } duplicates[bottles[i]] = 1; } //cout << endl; for (int i = k; i < n; i++) { if (duplicates[bottles[i]] == 0) { unique_after_k.push_back(i); //cout << "u(" << i << ", " << bottles[i] << ") "; } duplicates[bottles[i]] = 1; } if (duplicates_until_k.size() > unique_after_k.size()) { cout << -1; } else { long result = 0; for (int i = duplicates_until_k.size() - 1, j = 0; i >= 0; i--, j++) { //cout << "r(" << result << "," << duplicates_until_k[i] << ", " << (k - 1 - j) << ") "; result += ((k - 1 - j) - duplicates_until_k[i]); result += (unique_after_k[j] - (k - 1 - j)); } cout << result; } return 0; } |