Submission #829429

#TimeUsernameProblemLanguageResultExecution timeMemory
829429LucaIlieBuilding 4 (JOI20_building4)C++17
11 / 100
66 ms78176 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 2000; int a[2 * MAX_N + 1], b[2 * MAX_N + 1], dp[2 * MAX_N + 1][2 * MAX_N + 1][2]; int main() { int n; cin >> n; for ( int i = 1; i <= 2 * n; i++ ) cin >> a[i]; for ( int i = 1; i <= 2 * n; i++ ) cin >> b[i]; dp[0][0][0] = true; dp[0][0][1] = true; for ( int i = 1; i <= 2 * n; i++ ) { for ( int j = 1; j <= i; j++ ) { if ( a[i] >= a[i - 1] ) dp[i][j][0] |= dp[i - 1][j - 1][0]; if ( a[i] >= b[i - 1] ) dp[i][j][0] |= dp[i - 1][j - 1][1]; } for ( int j = 0; j <= i; j++ ) { if ( b[i] >= a[i - 1] ) dp[i][j][1] |= dp[i - 1][j][0]; if ( b[i] >= b[i - 1] ) dp[i][j][1] |= dp[i - 1][j][1]; } } if ( (dp[2 * n][n][0] | dp[2 * n][n][1]) == 0 ) { cout << -1; return 0; } vector<char> sol; int j = n, lastt = 1e9; for ( int i = 2 * n; i >= 1; i-- ) { if ( dp[i][j][0] && a[i] <= lastt ) { sol.push_back( 'A' ); lastt = a[i]; j--; } else { sol.push_back( 'B' ); lastt = b[i]; } } reverse( sol.begin(), sol.end() ); for ( char c: sol ) cout << c; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...