#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int main() {
std::ios::sync_with_stdio(false);
int n, k;
cin >> n >> k;
vector<int> bottles;
int x;
unordered_map<int, int> count;
for(int i = 0; i < n; ++i) {
cin >> x;
bottles.push_back(x);
if (i < k) {
count[x] += 1;
}
}
int left = k - 1, right = k;
long long results = 0;
while (left >= 0) {
int cur = bottles[left];
if (count[cur] == 1) { // already unique bottle
--left;
continue;
}
// cout << "left=" << left << " right=" << right << endl;
int cand = bottles[right];
while(right < n && count[cand] > 0) {
cand = bottles[++right];
}
if(right == n) { // no candidate for swap
results = -1;
break;
}
results += right - left;
++count[cand];
--count[cur];
++right;
--left;
}
cout << results << endl;
}
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 | #include <iostream> #include <vector> #include <unordered_map> using namespace std; int main() { std::ios::sync_with_stdio(false); int n, k; cin >> n >> k; vector<int> bottles; int x; unordered_map<int, int> count; for(int i = 0; i < n; ++i) { cin >> x; bottles.push_back(x); if (i < k) { count[x] += 1; } } int left = k - 1, right = k; long long results = 0; while (left >= 0) { int cur = bottles[left]; if (count[cur] == 1) { // already unique bottle --left; continue; } // cout << "left=" << left << " right=" << right << endl; int cand = bottles[right]; while(right < n && count[cand] > 0) { cand = bottles[++right]; } if(right == n) { // no candidate for swap results = -1; break; } results += right - left; ++count[cand]; --count[cur]; ++right; --left; } cout << results << endl; } |
English