제출 #281524

#제출 시각아이디문제언어결과실행 시간메모리
281524shoemakerjo건물 4 (JOI20_building4)C++14
100 / 100
327 ms48280 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pii pair<int, int> #define pll pair<ll, ll> int n; const int maxn = 1000010; int a[maxn]; int b[maxn]; pii rg[maxn][2]; int res[maxn]; //0 for A, 1 for B pii urange(pii u, pii v) { if (u.first == -1) return v; if (v.first == -1) return u; return {min(u.first, v.first), max(u.second, v.second)}; } bool isin(int val, pii br) { return val >= br.first && val <= br.second; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for (int i = 1; i <= 2*n; i++) { cin >> a[i]; } for (int i = 1; i <= 2*n; i++) { cin >> b[i]; } // set A initial values to be 1 of each rg[1][0] = {1, 1}; rg[1][1] = {0, 0}; for (int i = 2; i <= 2*n; i++) { rg[i][0] = {-1, -1}; rg[i][1] = {-1, -1}; if (a[i-1] <= a[i]) { rg[i][0] = urange(rg[i][0], rg[i-1][0]); } if (b[i-1] <= a[i]) { rg[i][0] = urange(rg[i][0], rg[i-1][1]); } if (a[i-1] <= b[i]) { rg[i][1] = urange(rg[i][1], rg[i-1][0]); } if (b[i-1] <= b[i]) { rg[i][1] = urange(rg[i][1], rg[i-1][1]); } if (rg[i][0].first != -1) { rg[i][0] = {rg[i][0].first+1, rg[i][0].second+1}; } // cout << i << " : " << rg[i][0].first << " " << rg[i][0].second // << " -- " << rg[i][1].first << " " << rg[i][1].second << endl; } int indo = -1; if (isin(n, rg[2*n][0])) indo = 0; if (isin(n, rg[2*n][1])) indo = 1; res[2*n] = indo; if (indo == -1) { cout << -1 << endl; return 0; } int ctarg = n; for (int i = 2*n-1; i >= 1; i--) { if (indo == 0) ctarg--; int nindo = -1; int cval = a[i+1]; if (indo == 1) cval = b[i+1]; if (isin(ctarg, rg[i][0]) && a[i] <= cval) { nindo = 0; } else nindo = 1; indo = nindo; res[i] = indo; } for (int i = 1; i <= 2*n; i++) { if (res[i] == 0) cout << "A"; else cout << "B"; } cout << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...