Submission #1204155

#TimeUsernameProblemLanguageResultExecution timeMemory
1204155avighnaBuilding 4 (JOI20_building4)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int n; std::cin >> n; std::vector<int> a(2 * n), b(2 * n), buf; for (auto &i : a) { std::cin >> i; buf.push_back(i); } for (auto &i : b) { std::cin >> i; buf.push_back(i); } std::sort(buf.begin(), buf.end()); buf.erase(std::unique(buf.begin(), buf.end()), buf.end()); auto compress = [&](int x) { return std::lower_bound(buf.begin(), buf.end(), x) - buf.begin(); }; for (auto &i : a) { i = compress(i); } for (auto &i : b) { i = compress(i); } a.push_back(4 * n), b.push_back(4 * n); std::vector dp(2 * n + 1, std::vector(n + 1, std::vector(3, true))); for (int i = 2 * n - 1; i >= 0; --i) { for (int j = 0; j <= n; ++j) { for (int k = 0; k < 3; ++k) { dp[i][j][k] = false; int a_o = a[i], b_o = b[i]; if (k == 1) { b[i] = 4 * n; } if (k == 2) { a[i] = 4 * n; } if (j == n) { dp[i][n][k] = std::is_sorted(b.begin() + i, b.end()); } else { if (a[i] <= a[i + 1] and a[i] <= b[i + 1]) { dp[i][j][k] = dp[i][j][k] or dp[i + 1][j + 1][0]; } if (a[i] <= a[i + 1]) { dp[i][j][k] = dp[i][j][k] or dp[i + 1][j + 1][1]; } if (a[i] <= b[i + 1]) { dp[i][j][k] = dp[i][j][k] or dp[i + 1][j + 1][2]; } if (b[i] <= a[i + 1] and b[i] <= b[i + 1]) { dp[i][j][k] = dp[i][j][k] or dp[i + 1][j][0]; } if (b[i] <= a[i + 1]) { dp[i][j][k] = dp[i][j][k] or dp[i + 1][j][1]; } if (b[i] <= b[i + 1]) { dp[i][j][k] = dp[i][j][k] or dp[i + 1][j][2]; } } a[i] = a_o, b[i] = b_o; } } } if (!dp[0][0][0]) { std::cout << "-1\n"; return 0; } std::string ans; for (int i = 0, j = 0, k = 0; i < 2 * n; ++i) { int a_o = a[i], b_o = b[i]; if (k == 1) { b[i] = 4 * n; } if (k == 2) { a[i] = 4 * n; } if (j == n) { while (ans.length() < 2 * n) { ans.push_back('B'); } break; } if (a[i] <= a[i + 1] and a[i] <= b[i + 1] and dp[i + 1][j + 1][0]) { ans.push_back('A'); j++, k = 0; } else if (a[i] <= a[i + 1] and dp[i + 1][j + 1][1]) { ans.push_back('A'); j++, k = 1; } else if (a[i] <= b[i + 1] and dp[i + 1][j + 1][2]) { ans.push_back('A'); j++, k = 2; } else if (b[i] <= a[i + 1] and dp[i + 1][j][0]) { ans.push_back('B'); k = 0; } else if (b[i] <= a[i + 1] and dp[i + 1][j][1]) { ans.push_back('B'); k = 1; } else if (b[i] <= b[i + 1] and dp[i + 1][j][2]) { ans.push_back('B'); k = 2; } a[i] = a_o, b[i] = b_o; } std::cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...