#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define MAXN 100000
int seen[MAXN];
int main()
{
int n;
int k;
vector<int> v;
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++) {
int value = 0;
scanf("%d", &value);
v.push_back(value);
}
vector<int> repeated_position;
vector<int> nearest_missing_position;
for (int i = 0; i < k; ++i) {
if (seen[v[i]] == 0) {
seen[v[i]] = 1;
} else {
repeated_position.push_back(i);
}
}
for (int i = k; i < n; ++i) {
if (seen[v[i]] == 0) {
seen[v[i]] = 1;
nearest_missing_position.push_back(i);
}
}
if (repeated_position.size() > nearest_missing_position.size()) {
printf("-1\n");
} else {
long long distance_sum = 0;
for (int i = 0; i < repeated_position.size(); i++) {
distance_sum += nearest_missing_position[i] - repeated_position[i];
}
printf("%lld\n", distance_sum);
}
}
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 | #include<cstdio> #include<vector> #include<algorithm> using namespace std; #define MAXN 100000 int seen[MAXN]; int main() { int n; int k; vector<int> v; scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { int value = 0; scanf("%d", &value); v.push_back(value); } vector<int> repeated_position; vector<int> nearest_missing_position; for (int i = 0; i < k; ++i) { if (seen[v[i]] == 0) { seen[v[i]] = 1; } else { repeated_position.push_back(i); } } for (int i = k; i < n; ++i) { if (seen[v[i]] == 0) { seen[v[i]] = 1; nearest_missing_position.push_back(i); } } if (repeated_position.size() > nearest_missing_position.size()) { printf("-1\n"); } else { long long distance_sum = 0; for (int i = 0; i < repeated_position.size(); i++) { distance_sum += nearest_missing_position[i] - repeated_position[i]; } printf("%lld\n", distance_sum); } } |
English