Submission #626533

#TimeUsernameProblemLanguageResultExecution timeMemory
626533dxz05Building 4 (JOI20_building4)C++14
11 / 100
2013 ms155328 KiB
#include <bits/stdc++.h> using namespace std; pair<int, int> p[4004][2][2002]; int main() { cin.tie(0)->sync_with_stdio(0); for (int i = 0; i < 4004; i++){ for (int k = 0; k < 2; k++){ for (int j = 0; j < 2002; j++){ p[i][k][j] = make_pair(-1, -1); } } } int n; cin >> n; vector<int> a(2 * n), b(2 * n); for (int &i : a) cin >> i; for (int &i : b) cin >> i; vector<vector<char>> dp(2, vector<char>(n + 1)); dp[0][1] = true; dp[1][0] = true; for (int i = 1; i < 2 * n; i++){ vector<vector<char>> ndp(2, vector<char>(n + 1)); for (int x = 0; x <= min(n, i + 1); x++){ // c[i] = a[i] if (x > 0){ if (dp[0][x - 1] && a[i - 1] <= a[i]){ ndp[0][x] = true; p[i][0][x] = make_pair(0, x - 1); } if (dp[1][x - 1] && b[i - 1] <= a[i]){ ndp[0][x] = true; p[i][0][x] = make_pair(1, x - 1); } } // c[i] = b[i]; if (dp[0][x] && a[i - 1] <= b[i]){ ndp[1][x] = true; p[i][1][x] = make_pair(0, x); } if (dp[1][x] && b[i - 1] <= b[i]){ ndp[1][x] = true; p[i][1][x] = make_pair(1, x); } } dp = ndp; } if (!dp[0][n] && !dp[1][n]){ cout << "-1" << endl; return 0; } int i = 2 * n - 1; int j = (dp[0][n] ? 0 : 1); string s; while (i >= 0){ s.push_back('A' + (j != 0)); if (i > 0 && p[i][j][n] == make_pair(-1, -1)){ assert(false); } pair<int, int> pp = p[i][j][n]; j = pp.first; n = pp.second; i--; } reverse(s.begin(), s.end()); cout << s << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...