제출 #211920

#제출 시각아이디문제언어결과실행 시간메모리
211920WLZ건물 4 (JOI20_building4)C++14
100 / 100
469 ms121776 KiB
#include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; const int INF = 0x3f3f3f3f; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector< vector<int> > a(2, vector<int>(2 * n + 1)); for (int i = 0; i < 2; i++) { for (int j = 1; j <= 2 * n; j++) { cin >> a[i][j]; } } vector< vector<int> > dp_r(2 * n + 1, vector<int>(2, -1)); vector< vector<int> > dp_l(2 * n + 1, vector<int>(2, INF)); dp_r[0][0] = dp_r[0][1] = dp_l[0][0] = dp_l[0][1] = 0; for (int i = 0; i < 2 * n; i++) { for (int j = 0; j < 2; j++) { if (dp_r[i][j] == -1) { continue; } if (a[j][i] <= a[0][i + 1]) { dp_r[i + 1][0] = max(dp_r[i + 1][0], dp_r[i][j] + 1); dp_l[i + 1][0] = min(dp_l[i + 1][0], dp_l[i][j] + 1); } if (a[j][i] <= a[1][i + 1]) { dp_r[i + 1][1] = max(dp_r[i + 1][1], dp_r[i][j]); dp_l[i + 1][1] = min(dp_l[i + 1][1], dp_l[i][j]); } } } int cur; if (dp_r[2 * n][0] >= n && dp_l[2 * n][0] <= n) { cur = 0; } else if (dp_r[2 * n][1] >= n && dp_l[2 * n][1] <= n) { cur = 1; } else { cout << -1 << '\n'; return 0; } string ans = ""; for (int i = 2 * n, cnt = n; i >= 1; i--) { if (cur == 0) { ans += 'A'; cnt--; } else { ans += 'B'; } if (a[0][i - 1] <= a[cur][i] && dp_r[i - 1][0] >= cnt && dp_l[i - 1][0] <= cnt) { cur = 0; } else { cur = 1; } } reverse(ans.begin(), ans.end()); cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...