// 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 |