Submission #782980

#TimeUsernameProblemLanguageResultExecution timeMemory
782980JosiaBuilding 4 (JOI20_building4)C++17
100 / 100
192 ms49476 KiB
#include <bits/stdc++.h>

using namespace std;

#define int int64_t


signed main() {
    cin.tie(0);
    ios_base::sync_with_stdio(0);

    int n; cin >> n;

    n*=2;

    vector<int> a(n), b(n);

    for (int &i: a) cin >> i;    
    for (int &i: b) cin >> i;    


    int la=0, ra=0;
    int lb=0, rb=0;
    int curra = 0;
    int currb = 0;


    vector<array<int, 4>> bcktrck(n);

    for (int i = 0; i<n; i++) {
        bcktrck[i] = {la, ra, lb, rb};
        int nla=1e18, nra=-1e18;
        if (a[i] >= curra) {
            nla=min(nla,la+1);
            nra=max(nra,ra+1);
        }

        if (a[i] >= currb) {
            nla=min(nla,lb+1);
            nra=max(nra,rb+1);
        }


        int nlb=1e18, nrb=-1e18;
        if (b[i] >= curra) {
            nlb=min(nlb,la);
            nrb=max(nrb,ra);
        }

        if (b[i] >= currb) {
            nlb=min(nlb,lb);
            nrb=max(nrb,rb);
        }

        la=nla;
        ra=nra;
        lb=nlb;
        rb=nrb;
        curra = a[i];
        currb = b[i];
    }

    // bcktrck.push_back({la, ra, lb, rb});

    if (!(min(la, lb) <= n/2 && n/2 <= max(ra, rb))) {
        cout << -1 << "\n";
        return 0;
    }

    int currReq = n/2;
    bool currCol = 0;

    if (!(lb <= currReq && currReq <= rb)) currCol = 1;

    string res;

    for (int i = n-1; i>=0; i--) {
        if (currCol) res.push_back('A');
        else res.push_back('B');

        currReq -= currCol;

        int currVal = 0;

        if (currCol) currVal = a[i];
        if (!currCol) currVal = b[i];

        if ((i==0?1:(currVal >= a[i-1])) && bcktrck[i][0] <= currReq && currReq <= bcktrck[i][1]) {
            currCol = 1;
        }
        if ((i==0?1:(currVal >= b[i-1])) && bcktrck[i][2] <= currReq && currReq <= bcktrck[i][3]) {
            currCol = 0;
        }
    }

    reverse(res.begin(), res.end());

    cout << res << "\n";



    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...