Submission #520682

#TimeUsernameProblemLanguageResultExecution timeMemory
520682ymmBuilding 4 (JOI20_building4)C++17
100 / 100
243 ms45236 KiB
/// /// Oh? You're approaching me? /// #include <bits/stdc++.h> #define Loop(x,l,r) for(ll x = ll(l); x < ll(r); ++x) #define LoopR(x,l,r) for(ll x = ll(r)-1; x >= ll(l); --x) #define Kill(x) exit((cout << (x) << '\n', 0)) typedef long long ll; typedef std::pair<int,int> pii; typedef std::pair<ll,ll> pll; using namespace std; const int N = 1'000'010; int dpal[N], dpar[N]; int dpbl[N], dpbr[N]; int a[N], b[N]; int n; int main() { cin.tie(0) -> sync_with_stdio(false); cin >> n; n*=2; //Loop(i,0,n) cout << (a[i]=rand()%100) << ' '; cout << '\n';//cin >> a[i]; //Loop(i,0,n) cout << (b[i]=rand()%100) << ' '; cout << '\n';//cin >> b[i]; Loop(i,0,n) cin >> a[i]; Loop(i,0,n) cin >> b[i]; dpal[0] = 1; dpar[0] = 2; dpbl[0] = 0; dpbr[0] = 1; Loop(i,1,n){ int l, r; l = min(a[i-1]<=a[i]?dpal[i-1]:N, b[i-1]<=a[i]?dpbl[i-1]:N); r = max(a[i-1]<=a[i]?dpar[i-1]:0, b[i-1]<=a[i]?dpbr[i-1]:0); if(r) {dpal[i] = l+1; dpar[i] = r+1;} else {dpal[i] = N; dpar[i] = 0;} l = min(a[i-1]<=b[i]?dpal[i-1]:N, b[i-1]<=b[i]?dpbl[i-1]:N); r = max(a[i-1]<=b[i]?dpar[i-1]:0, b[i-1]<=b[i]?dpbr[i-1]:0); dpbl[i] = l; dpbr[i] = r; if(!(!dpar[i] || !dpbr[i] || max(dpal[i], dpbl[i]) <= min(dpar[i], dpbr[i]))){ cout <<"err\n"; } // cout << dpal[i] << ' ' << dpar[i] << '\n'; // cout << dpbl[i] << ' ' << dpbr[i] << '\n'; // cout << '\n'; } if(!(dpal[n-1] <= n/2 && n/2 < dpar[n-1]) && !(dpbl[n-1] <= n/2 && n/2 < dpbr[n-1])) Kill(-1); int k=n/2, lst=1e9+10; string ans; LoopR(i,0,n){ if(dpal[i] <= k && k < dpar[i] && a[i]<=lst){ ans.push_back('A'); lst=a[i]; --k; } else { ans.push_back('B'); lst=b[i]; } } reverse(ans.begin(), ans.end()); cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...