#include <stdio.h>
#include <strings.h>
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <tuple>
#include <cstdio>
#include <algorithm> // std::sort
using namespace std;
//template<typename K, typename V>
//void print_vec(const vector< tuple<K, V> >& tupleVector) {
// for (const auto& i : tupleVector) {
// cout << get<0>(i) << ", " << get<1>(i) << endl;
// }
//}
int main() {
int n, k;
scanf("%d %d\n", &n, &k);
map<int, int> value2minpos;
for (int i=0; i<n; ++i){
int a;
scanf("%d", &a);
auto pos = value2minpos.find(a);
if (pos==value2minpos.end())
value2minpos[a] = i;
}
vector< tuple<int, int> > minpos2value;
for (auto it=value2minpos.begin(); it!=value2minpos.end(); it++) {
minpos2value.push_back( make_tuple(it->second, it->first) );
}
sort(minpos2value.begin(), minpos2value.end());
// print_vec(minpos2value);
if (minpos2value.size()<k) {
printf("-1\n");
return 0;
}
long cost = 0;
for (int i=0; i<k; ++i) {
cost += get<0>(minpos2value[i])-i;
}
printf("%ld\n", cost);
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 | #include <stdio.h> #include <strings.h> #include <iostream> #include <string> #include <vector> #include <map> #include <tuple> #include <cstdio> #include <algorithm> // std::sort using namespace std; //template<typename K, typename V> //void print_vec(const vector< tuple<K, V> >& tupleVector) { // for (const auto& i : tupleVector) { // cout << get<0>(i) << ", " << get<1>(i) << endl; // } //} int main() { int n, k; scanf("%d %d\n", &n, &k); map<int, int> value2minpos; for (int i=0; i<n; ++i){ int a; scanf("%d", &a); auto pos = value2minpos.find(a); if (pos==value2minpos.end()) value2minpos[a] = i; } vector< tuple<int, int> > minpos2value; for (auto it=value2minpos.begin(); it!=value2minpos.end(); it++) { minpos2value.push_back( make_tuple(it->second, it->first) ); } sort(minpos2value.begin(), minpos2value.end()); // print_vec(minpos2value); if (minpos2value.size()<k) { printf("-1\n"); return 0; } long cost = 0; for (int i=0; i<k; ++i) { cost += get<0>(minpos2value[i])-i; } printf("%ld\n", cost); return 0; } |
English