Submission #379497

#TimeUsernameProblemLanguageResultExecution timeMemory
379497Jarif_RahmanBuilding 4 (JOI20_building4)C++17
100 / 100
312 ms44512 KiB
#include <bits/stdc++.h> #define pb push_back #define f first #define sc second using namespace std; typedef long long int ll; typedef string str; const int inf = 1e9 + 9; bool inside(pair<int, int> a, int p){ return (p >= a.f && p <= a.sc); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> a(2*n), b(2*n); for(int &x: a) cin >> x; for(int &x: b) cin >> x; vector<pair<int, int>> dpa(2*n), dpb(2*n); dpa[0] = {1, 1}; dpb[0] = {0, 0}; for(int i = 1; i < 2*n; i++){ auto [al, ar] = dpa[i-1]; auto [bl, br] = dpb[i-1]; { int l1 = -1, r1 = -1, l2 = -1, r2 = -1; if(a[i] >= a[i-1] && al != -1) l1 = al+1, r1 = ar+1; if(a[i] >= b[i-1] && bl != -1) l2 = bl+1, r2 = br+1; if(l1 == -1 && l2 == -1){ dpa[i] = {-1, -1}; } else if(l1 == -1){ dpa[i] = {l2, r2}; } else if(l2 == -1){ dpa[i] = {l1, r1}; } else{ if(l1 > l2) swap(l1, l2), swap(r1, r2); dpa[i] = {min(l1, l2), max(r1, r2)}; } } { int l1 = -1, r1 = -1, l2 = -1, r2 = -1; if(b[i] >= a[i-1] && al != -1) l1 = al, r1 = ar; if(b[i] >= b[i-1] && bl != -1) l2 = bl, r2 = br; if(l1 == -1 && l2 == -1){ dpb[i] = {-1, -1}; } else if(l1 == -1){ dpb[i] = {l2, r2}; } else if(l2 == -1){ dpb[i] = {l1, r1}; } else{ if(l1 > l2) swap(l1, l2), swap(r1, r2); dpb[i] = {min(l1, l2), max(r1, r2)}; } } } if(!inside(dpa[2*n-1], n) && !inside(dpb[2*n-1], n)){ cout << "-1\n"; exit(0); } str ans = ""; str cur; if(inside(dpa[2*n-1], n)) cur = "A"; else cur = "B"; int cnt = n; for(int i = 2*n-1; i >= 0; i--){ ans+=cur; if(cur == "A") cnt--; if(i > 0){ if(inside(dpa[i-1], cnt) && (cur == "A" ? a:b)[i] >= a[i-1]) cur = "A"; else cur = "B"; } } reverse(ans.begin(), ans.end()); cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...