#include <iostream>
#include <vector>
#include <set>
#include <map>
int32_t ora(const int total_bottles, const int different_bottles, const std::vector<int>& brands) {
std::set<int32_t> unique_brands(brands.cbegin(), brands.cend());
if (unique_brands.size() < different_bottles) {
return -1;
}
std::vector<int32_t> ids{};
std::map<int32_t, int32_t> count{};
for (int i = 0; i < different_bottles; ++i) {
count[brands[i]]++;
if (count[brands[i]] > 1) {
ids.emplace_back(i);
}
}
int32_t result{};
for (int i = ids.size() - 1; i >= 0; --i) {
result += (different_bottles + i) - ids[i];
}
return result;
}
int main() {
int32_t total_bottles{};
int32_t different_bottles{};
std::cin >> total_bottles >> different_bottles;
std::vector<int32_t> brands(total_bottles);
for (int i = 0; i < total_bottles; ++i) {
std::cin >> brands[i];
}
std::cout << ora(total_bottles, different_bottles, brands) << "\n";
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 | #include <iostream> #include <vector> #include <set> #include <map> int32_t ora(const int total_bottles, const int different_bottles, const std::vector<int>& brands) { std::set<int32_t> unique_brands(brands.cbegin(), brands.cend()); if (unique_brands.size() < different_bottles) { return -1; } std::vector<int32_t> ids{}; std::map<int32_t, int32_t> count{}; for (int i = 0; i < different_bottles; ++i) { count[brands[i]]++; if (count[brands[i]] > 1) { ids.emplace_back(i); } } int32_t result{}; for (int i = ids.size() - 1; i >= 0; --i) { result += (different_bottles + i) - ids[i]; } return result; } int main() { int32_t total_bottles{}; int32_t different_bottles{}; std::cin >> total_bottles >> different_bottles; std::vector<int32_t> brands(total_bottles); for (int i = 0; i < total_bottles; ++i) { std::cin >> brands[i]; } std::cout << ora(total_bottles, different_bottles, brands) << "\n"; return 0; } |
English