Submission #1213887

#TimeUsernameProblemLanguageResultExecution timeMemory
1213887SharkyHieroglyphs (IOI24_hieroglyphs)C++20
3 / 100
30 ms4376 KiB
#include "hieroglyphs.h" #include <bits/stdc++.h> using namespace std; #define pii pair<int,int> #define all(x) x.begin(),x.end() #define fi first #define se second #define sz(x) (int)x.size() const int MAX = 200000; int fa[MAX], fb[MAX], cur[MAX], crit[MAX]; std::vector<int> ucs(std::vector<int> a, std::vector<int> b) { int n = sz(a), m = sz(b); bool st1 = true; if (n == m) { vector<int> x = a, y = b; sort(all(x)), sort(all(y)); for (int i = 0; i < n; i++) if (x[i] != i || y[i] != i) st1 = false; } else st1 = false; if (st1) { if (a == b) return a; return {-1}; } for (int i = 0; i < n; i++) fa[a[i]]++; for (int i = 0; i < m; i++) fb[b[i]]++; int sum = 0; for (int i = 0; i < MAX; i++) crit[i] = min(fa[i], fb[i]), sum += crit[i]; int pa = 0, pb = 0; vector<int> ucs; while (pa < n && pb < m) { if (fa[a[pa]] < crit[a[pa]] || fb[b[pb]] < crit[b[pb]]) return {-1}; if (fa[a[pa]] == crit[a[pa]]) { while (pb < m && b[pb] != a[pa]) fb[b[pb]]--, pb++; if (pb < m) { ucs.push_back(a[pa]); crit[a[pa]]--; fa[a[pa]]--; fb[b[pb]]--; pa++, pb++; } } else if (fb[b[pb]] == crit[b[pb]]) { while (pa < n && a[pa] != b[pb]) fa[a[pa]]--, pa++; if (pa < n) { ucs.push_back(b[pb]); crit[b[pb]]--; fa[a[pa]]--; fb[b[pb]]--; pa++, pb++; } } else if (fa[a[pa]] - 1 >= crit[a[pa]]) { fa[a[pa]]--; pa++; } else if (fb[b[pb]] - 1 >= crit[b[pb]]) { fb[b[pb]]--; pb++; } else return {-1}; } if (sz(ucs) == sum) return ucs; return {-1}; }
#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...