Submission #930854

#TimeUsernameProblemLanguageResultExecution timeMemory
930854ksujay2Building 4 (JOI20_building4)C++17
100 / 100
218 ms48208 KiB
#include <bits/stdc++.h> using namespace std; #define FOR(i, a, b) for(int i = (a); i < (b); i++) #define F0R(i, b) for(int i = 0; i < (b); i++) #define R0F(i, b) for(int i = (b) - 1; i >= 0; i--) #define ROF(i, a, b) for(int i = (b) - 1; i >= (a); i--) using pi = pair<int, int>; int main() { ios::sync_with_stdio(false), cin.tie(nullptr); int N; cin >> N; vector<int> A(2 * N), B(2 * N); F0R(i, 2 * N) cin >> A[i]; F0R(i, 2 * N) cin >> B[i]; vector<array<pi, 2>> dp(2 * N, {{{1e9, -1e9}, {1e9, -1e9}}}); dp[0][0] = {1, 1}; dp[0][1] = {-1, -1}; FOR(i, 1, 2 * N) { if(A[i - 1] <= A[i]) { dp[i][0].second = max(dp[i][0].second, dp[i - 1][0].second + 1); dp[i][0].first = min(dp[i][0].first, dp[i - 1][0].first + 1); } if(A[i - 1] <= B[i]) { dp[i][1].second = max(dp[i][1].second, dp[i - 1][0].second - 1); dp[i][1].first = min(dp[i][1].first, dp[i - 1][0].first - 1); } if(B[i - 1] <= A[i]) { dp[i][0].second = max(dp[i][0].second, dp[i - 1][1].second + 1); dp[i][0].first = min(dp[i][0].first, dp[i - 1][1].first + 1); } if(B[i - 1] <= B[i]) { dp[i][1].second = max(dp[i][1].second, dp[i - 1][1].second - 1); dp[i][1].first = min(dp[i][1].first, dp[i - 1][1].first - 1); } } vector<int> choice(2 * N); int sum = 0; int lv = 1e9; ROF(i, 0, 2 * N) { if(lv >= A[i] && dp[i][0].second >= -sum && -sum >= dp[i][0].first) { choice[i] = 0; lv = A[i]; sum++; } else if(lv >= B[i] && dp[i][1].second >= -sum && -sum >= dp[i][1].first) { choice[i] = 1; lv = B[i]; sum--; } else { cout << -1 << endl; return 0; } } F0R(i, 2 * N) { if(choice[i] == 0) cout << 'A'; else cout << 'B'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...