제출 #1137831

#제출 시각아이디문제언어결과실행 시간메모리
1137831woohyun_jng건물 4 (JOI20_building4)C++20
11 / 100
34 ms5188 KiB
#include <bits/stdc++.h> #define int long long #define MAX 600000 using namespace std; typedef array<int, 2> pr; int A[MAX], B[MAX]; pr dp[MAX][2]; signed main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); int N, K, Z; bool X, Y; string res; cin >> N; for (int i = 1; i <= N * 2; i++) cin >> A[i]; for (int i = 1; i <= N * 2; i++) cin >> B[i]; for (int i = 1; i <= N * 2; i++) { X = A[i] >= A[i - 1] && dp[i - 1][0][0] != -1; Y = A[i] >= B[i - 1] && dp[i - 1][1][0] != -1; if (X && Y) dp[i][0] = {min(dp[i - 1][0][0], dp[i - 1][1][0]), max(dp[i - 1][0][1], dp[i - 1][1][1])}; else if (X) dp[i][0] = dp[i - 1][0]; else if (Y) dp[i][0] = dp[i - 1][1]; else dp[i][0] = {-1, -1}; X = B[i] >= A[i - 1] && dp[i - 1][0][0] != -1; Y = B[i] >= B[i - 1] && dp[i - 1][1][0] != -1; if (X && Y) dp[i][1] = {min(dp[i - 1][0][0], dp[i - 1][1][0]) + 1, max(dp[i - 1][0][1], dp[i - 1][1][1]) + 1}; else if (X) dp[i][1] = {dp[i - 1][0][0] + 1, dp[i - 1][0][1] + 1}; else if (Y) dp[i][1] = {dp[i - 1][1][0] + 1, dp[i - 1][1][1] + 1}; else dp[i][1] = {-1, -1}; } if (!(dp[N * 2][0][0] <= N && N <= dp[N * 2][0][1]) && !(dp[N * 2][1][0] <= N && N <= dp[N * 2][1][1])) { cout << -1 << '\n'; return 0; } K = N; for (int i = N * 2; i >= 1; i--) { if ((i == N * 2 || Z >= A[i]) && dp[i][0][0] != -1 && dp[i][0][0] <= K && K <= dp[i][0][1]) res.push_back('A'), Z = A[i]; else res.push_back('B'), K--, Z = B[i]; } reverse(res.begin(), res.end()); cout << res << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...