제출 #212516

#제출 시각아이디문제언어결과실행 시간메모리
212516combi1k1건물 4 (JOI20_building4)C++14
100 / 100
330 ms27500 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define ld double #define sz(x) (int)x.size() #define all(x) x.begin(),x.end() #define pb emplace_back #define X first #define Y second const int N = 1e6 + 5; typedef pair<int,int> ii; int a[N][2]; int l[N][2]; int r[N][2]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin >> n; n += n; for(int i = 1 ; i <= n ; ++i) cin >> a[i][0]; for(int i = 1 ; i <= n ; ++i) cin >> a[i][1]; for(int i = 1 ; i <= n ; ++i) { l[i][0] = l[i][1] = 1e9; r[i][0] = r[i][1] = -1e9; for(int x = 0 ; x < 2 ; ++x) for(int y = 0 ; y < 2 ; ++y) if (a[i - 1][x] <= a[i][y]) { l[i][y] = min(l[i][y],l[i - 1][x] + (y == 0)); r[i][y] = max(r[i][y],r[i - 1][x] + (y == 0)); } } int S = 0; int v = n / 2; if (l[n][0] > v) S = 1; if (r[n][0] < v) S = 1; if (l[n][S] > v) return cout << "-1",0; if (r[n][S] < v) return cout << "-1",0; string res = ""; for(int i = n ; i >= 1 ; --i) { if (S == 0) res += 'A', --v; if (S == 1) res += 'B'; for(int x = 0 ; x < 2 ; ++x) if (a[i - 1][x] <= a[i][S]) { if (l[i - 1][x] > v) continue; if (r[i - 1][x] < v) continue; S = x; break; } } reverse(all(res)); cout << res << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...