// B-1-ORA-Oranzada.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <unordered_set>
#include <queue>
#include <unordered_map>
using namespace std;
unsigned long const MAX_WINES = 5 * 100000 + 1;
int main()
{
unsigned int n, k;
cin >> n >> k;
int* wines = new int[n] {};
unordered_set<int> uniques;
queue<pair<int, int>> uniquesFirstOccurrence;
for (unsigned int i = 0; i < n; ++i) {
cin >> wines[i];
if (uniques.find(wines[i]) == uniques.end()){
uniques.insert(wines[i]);
uniquesFirstOccurrence.push(pair<int,int>(wines[i], i));
}
}
if (uniquesFirstOccurrence.size() < k) {
cout << -1;
return 0;
}
unordered_set<int> metUniques;
int neededSwaps = 0;
for (unsigned int i = 0; i < k; i++) {
if (metUniques.find(wines[i]) == metUniques.end()) //is this the first occurance?
{
metUniques.insert(wines[i]);
uniquesFirstOccurrence.pop();
}
else {
pair<int, int> neededUnique = uniquesFirstOccurrence.front();
uniquesFirstOccurrence.pop();
metUniques.insert(neededUnique.first);
neededSwaps += (neededUnique.second - i);
}
}
cout << neededSwaps;
}
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu
// Tips for Getting Started:
// 1. Use the Solution Explorer window to add/manage files
// 2. Use the Team Explorer window to connect to source control
// 3. Use the Output window to see build output and other messages
// 4. Use the Error List window to view errors
// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
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 56 57 58 59 60 61 | // B-1-ORA-Oranzada.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include <unordered_set> #include <queue> #include <unordered_map> using namespace std; unsigned long const MAX_WINES = 5 * 100000 + 1; int main() { unsigned int n, k; cin >> n >> k; int* wines = new int[n] {}; unordered_set<int> uniques; queue<pair<int, int>> uniquesFirstOccurrence; for (unsigned int i = 0; i < n; ++i) { cin >> wines[i]; if (uniques.find(wines[i]) == uniques.end()){ uniques.insert(wines[i]); uniquesFirstOccurrence.push(pair<int,int>(wines[i], i)); } } if (uniquesFirstOccurrence.size() < k) { cout << -1; return 0; } unordered_set<int> metUniques; int neededSwaps = 0; for (unsigned int i = 0; i < k; i++) { if (metUniques.find(wines[i]) == metUniques.end()) //is this the first occurance? { metUniques.insert(wines[i]); uniquesFirstOccurrence.pop(); } else { pair<int, int> neededUnique = uniquesFirstOccurrence.front(); uniquesFirstOccurrence.pop(); metUniques.insert(neededUnique.first); neededSwaps += (neededUnique.second - i); } } cout << neededSwaps; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file |
English