Submission #1221505

#TimeUsernameProblemLanguageResultExecution timeMemory
1221505nibertHieroglyphs (IOI24_hieroglyphs)C++20
3 / 100
233 ms146864 KiB
#include <iostream> #include <vector> #include <unordered_map> #include <queue> using namespace std; // Check if sequence 'small' is a subsequence of 'large' bool is_subsequence(const vector<int>& large, const vector<int>& small) { int j = 0; for (int i = 0; i < (int)large.size() && j < (int)small.size(); ++i) { if (large[i] == small[j]) j++; } return j == (int)small.size(); } vector<int> ucs(vector<int> A, vector<int> B) { unordered_map<int, queue<int>> pos_in_B; for (int i = 0; i < (int)B.size(); ++i) { pos_in_B[B[i]].push(i); } vector<int> result; int last_pos = -1; for (int i = 0; i < (int)A.size(); ++i) { int val = A[i]; if (pos_in_B.count(val)) { while (!pos_in_B[val].empty() && pos_in_B[val].front() <= last_pos) { pos_in_B[val].pop(); } if (!pos_in_B[val].empty()) { last_pos = pos_in_B[val].front(); pos_in_B[val].pop(); result.push_back(val); } } } if (result.empty()) return {}; // empty sequence is valid UCS unordered_map<int, queue<int>> pos_in_A; for (int i = 0; i < (int)A.size(); ++i) { pos_in_A[A[i]].push(i); } vector<int> alt_result; last_pos = -1; for (int i = 0; i < (int)B.size(); ++i) { int val = B[i]; if (pos_in_A.count(val)) { while (!pos_in_A[val].empty() && pos_in_A[val].front() <= last_pos) { pos_in_A[val].pop(); } if (!pos_in_A[val].empty()) { last_pos = pos_in_A[val].front(); pos_in_A[val].pop(); alt_result.push_back(val); } } } if (alt_result != result && (!is_subsequence(result, alt_result) || !is_subsequence(alt_result, result))) { return {-1}; // no unique UCS } return result; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...