#include <algorithm> #include <cstdio> #include <vector> int n, k; int count_different(const std::vector<int>& a) { std::vector<bool> present(n+1, false); for(int i = 0; i < n; ++i) present[a[i]] = true; return std::count(present.begin(), present.end(), true); } int main() { scanf("%d%d", &n, &k); std::vector<int> a(n); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); const int diff_count = count_different(a); if(diff_count < k) { printf("-1\n"); return 0; } int i = 0; int j = 0; long long result = 0LL; std::vector<bool> present(n+1, false); for(int i = 0; i < k; ++i) { if(present[a[i]]) { while(present[a[j]]) ++j; std::swap(a[i], a[j]); result += j - i; } present[a[i]] = true; } printf("%lld\n", result); }
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 | #include <algorithm> #include <cstdio> #include <vector> int n, k; int count_different(const std::vector<int>& a) { std::vector<bool> present(n+1, false); for(int i = 0; i < n; ++i) present[a[i]] = true; return std::count(present.begin(), present.end(), true); } int main() { scanf("%d%d", &n, &k); std::vector<int> a(n); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); const int diff_count = count_different(a); if(diff_count < k) { printf("-1\n"); return 0; } int i = 0; int j = 0; long long result = 0LL; std::vector<bool> present(n+1, false); for(int i = 0; i < k; ++i) { if(present[a[i]]) { while(present[a[j]]) ++j; std::swap(a[i], a[j]); result += j - i; } present[a[i]] = true; } printf("%lld\n", result); } |