Submission #1206335

#TimeUsernameProblemLanguageResultExecution timeMemory
1206335VMaksimoski008Building 4 (JOI20_building4)C++20
100 / 100
642 ms119828 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int mod = 1e9 + 7;
const ll inf = 1e18;
const int N = 1e5 + 5;

signed main() {
    int n; cin >> n;
    vector<array<int, 2> > a(2*n+1);
    for(int i=1; i<=2*n; i++) cin >> a[i][0];
    for(int i=1; i<=2*n; i++) cin >> a[i][1];

    vector<vector<int> > dpL(2*n+1, vector<int>(2, 1e9));
    vector<vector<int> > dpR(2*n+1, vector<int>(2, -1e9));
    
    dpL[1] = { 0, 1 };
    dpR[1] = { 0, 1 };
    for(int i=2; i<=2*n; i++) {
        for(int j=0; j<2; j++) {
            for(int k=0; k<2; k++) {
                if(a[i][j] >= a[i-1][k]) {
                    dpL[i][j] = min(dpL[i][j], dpL[i-1][k] + j);
                    dpR[i][j] = max(dpR[i][j], dpR[i-1][k] + j);
                }
            }
        }
    }

    int p=-1;
    for(int i=0; i<2; i++)
        if(dpL[2*n][i] <= n && n <= dpR[2*n][i]) p = i;

    if(p == -1) {
        cout << -1 << endl;
        return 0;
    }

    string ans(2*n+1, 'A');
    if(p) ans[2*n] = 'B';

    int l=n-p, pos=2*n-1, last = a[2*n][p];
    for(; pos; pos--) {
        if(dpL[pos][0] <= l && l <= dpR[pos][0] && a[pos][0] <= last) {
            last = a[pos][0];
        } else if(dpL[pos][1] <= l && l <= dpR[pos][1] && a[pos][1] <= last) {
            ans[pos]++;
            last = a[pos][1];
            l--;
        } else {
            cout << -1 << endl;
            return 0;
        }
    }

    for(int i=1; i<=2*n; i++) cout << ans[i];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...