#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; } |