제출 #905208

#제출 시각아이디문제언어결과실행 시간메모리
905208DAleksa건물 4 (JOI20_building4)C++17
100 / 100
268 ms45568 KiB
#include <bits/stdc++.h>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    n *= 2;
    vector<int> a(n), b(n);
    for(int i = 0; i < n; i++) cin >> a[i];
    for(int i = 0; i < n; i++) cin >> b[i];
    vector<int> mna(n, 1e9), mnb(n, 1e9), mxa(n, -1e9), mxb(n, -1e9);
    mna[0] = mxa[0] = 1;
    mnb[0] = mxb[0] = -1;
    for(int i = 1; i < n; i++) {
        if(a[i] >= a[i - 1]) {
            mxa[i] = max(mxa[i], mxa[i - 1]);
            mna[i] = min(mna[i], mna[i - 1]);
        }
        if(a[i] >= b[i - 1]) {
            mxa[i] = max(mxa[i], mxb[i - 1]);
            mna[i] = min(mna[i], mnb[i - 1]);
        }
        if(b[i] >= a[i - 1]) {
            mxb[i] = max(mxb[i], mxa[i - 1]);
            mnb[i] = min(mnb[i], mna[i - 1]);
        }
        if(b[i] >= b[i - 1]) {
            mxb[i] = max(mxb[i], mxb[i - 1]);
            mnb[i] = min(mnb[i], mnb[i - 1]);
        }
        mxa[i]++;
        mna[i]++;
        mxb[i]--;
        mnb[i]--;
    }
    if(min(mna[n - 1], mnb[n - 1]) > 0 || max(mxa[n - 1], mxb[n - 1]) < 0) {
        cout << -1;
        return 0;
    }
    string s;
    bool oka = true, okb = true;
    int border = 0;
    for(int i = n - 1; i >= 0; i--) {
        if(oka) {
            if(mna[i] <= border && border <= mxa[i]) {
                s += 'A';
                border--;
                oka = (a[i] >= a[i - 1]);
                okb = (a[i] >= b[i - 1]);
                continue;
            }
        }
        if(okb) {
            if(mnb[i] <= border && border <= mxb[i]) {
                s += 'B';
                border++;
                oka = (b[i] >= a[i - 1]);
                okb = (b[i] >= b[i - 1]);
            }
        }
    }
    reverse(s.begin(), s.end());
    cout << s;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...