Submission #1322192

#TimeUsernameProblemLanguageResultExecution timeMemory
1322192pobeBuilding 4 (JOI20_building4)C++20
100 / 100
201 ms71860 KiB
#include <bits/stdc++.h> using namespace std; #define int long long void solve() { int n; cin >> n; n *= 2; vector <vector <int>> val(2, vector <int> (n)); for (int i = 0; i < n; ++i) { cin >> val[0][i]; } for (int i = 0; i < n; ++i) { cin >> val[1][i]; } vector <vector <int>> mx(2, vector <int> (n, 1)), mn(2, vector <int> (n, 1)), is(2, vector <int> (n)); is[0][n - 1] = 1; is[1][n - 1] = 1; int k = n / 2; for (int i = n - 2; i >= 0; --i) { for (int j = 0; j < 2; ++j) { mn[j][i] = n + 10; if (val[j][i] <= val[j][i + 1] && is[j][i + 1]) { mx[j][i] = max(mx[j][i], mx[j][i + 1] + 1); mn[j][i] = min(mn[j][i], mn[j][i + 1] + 1); is[j][i] = 1; } int cv = j ^ 1; if (val[j][i] <= val[cv][i + 1] && is[cv][i + 1]) { mx[j][i] = max(mx[j][i], n - mn[cv][i + 1] - i); mn[j][i] = min(mn[j][i], n - mx[cv][i + 1] - i); is[j][i] = 1; } } } int start = - 1; n /= 2; if (is[0][0]) { if (mx[0][0] >= n && mn[0][0] <= n) { start = 0; } } if (is[1][0]) { if (mx[1][0] >= n && mn[1][0] <= n) { start = 1; } } if (start == - 1) { cout << - 1 << '\n'; return; } n *= 2; string ans = ""; vector <int> counter(2, n / 2); for (int i = 0; i < n; ++i) { ans.push_back((char)('A' + start)); --counter[start]; if (i != n - 1) { if (is[start][i + 1]) { if (!(mx[start][i + 1] >= counter[start] && mn[start][i + 1] <= counter[start] && val[start][i + 1] >= val[start][i])) { start ^= 1; } } else { start ^= 1; } } } cout << ans << '\n'; } signed main() { cin.tie(0); ios::sync_with_stdio(false); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...