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...