Submission #211502

#TimeUsernameProblemLanguageResultExecution timeMemory
211502kostia244Building 4 (JOI20_building4)C++17
100 / 100
368 ms88816 KiB
#pragma GCC optimize("O2") #pragma GCC optimize("unroll-loops") #pragma GCC target("avx,avx2,sse,sse2,ssse3,tune=native") #include<bits/stdc++.h> #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define pb push_back using namespace std; using ll = long long; using vi = vector<ll>; using pi = pair<ll, ll>; using vpi = vector<pi>; const int maxn = 1005000 + 22, mod = 998244353; int n, a[maxn], b[maxn], mn[maxn][2], mx[maxn][2]; string ans; bool bt(int v, int l, int bl = n/2, int lst = 2e9) { if(bl<0||v<bl||(v && (l?b:a)[v-1]>lst)) return false; if(bl>mx[v][l]||bl<mn[v][l]) return false; if(!v) return true; if(!bt(v-1, 0, bl - (l==1), (l?b:a)[v-1])&&!bt(v-1, 1, bl - (l==1), (l?b:a)[v-1])) return 0; //cout << v << " " << l << " " << bl << '\n'; ans += "AB"[l]; return true; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; n *= 2; for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < n; i++) cin >> b[i]; memset(mn, 0x3f, sizeof mn); memset(mx, -0x3f, sizeof mx); mn[0][0] = mx[0][0] = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < 2; j++) { int lst = (i?(j?b:a)[i-1]:0); if(a[i]>=lst) { mn[i+1][0] = min(mn[i+1][0], mn[i][j]); mx[i+1][0] = max(mx[i+1][0], mx[i][j]); } if(b[i]>=lst) { mn[i+1][1] = min(mn[i+1][1], mn[i][j]+1); mx[i+1][1] = max(mx[i+1][1], mx[i][j]+1); } } } if(!bt(n, 0)&&!bt(n, 1)) cout << -1; cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...