Submission #1013898

#TimeUsernameProblemLanguageResultExecution timeMemory
1013898BaytoroBuilding 4 (JOI20_building4)C++17
100 / 100
184 ms58704 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define fr first
#define sc second
#define int ll
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
int n,m;
const int N=1e6+5;
pair<int,int> dp[N][2];
void solve() {
    int n;cin>>n;
    vector<int> a(2*n+1),b(2*n+1);
    for(int i=1;i<=2*n;i++) cin>>a[i];
    for(int i=1;i<=2*n;i++) cin>>b[i];

    for(int i=1;i<=2*n;i++) dp[i][0]=dp[i][1]={-1,-1};
    dp[1][0]={1,1};
    dp[1][1]={0,0};
    for(int i=2;i<=2*n;i++) {
        if(a[i]>=a[i-1] && dp[i-1][0].fr!=-1) {
            if(dp[i][0].fr==-1) {
                dp[i][0].fr=dp[i-1][0].fr+1;
                dp[i][0].sc=dp[i-1][0].sc+1;
            }
            else {
                dp[i][0].fr=min(dp[i][0].fr,dp[i-1][0].fr+1);
                dp[i][0].sc=max(dp[i][0].sc,dp[i-1][0].sc+1);
            }
        }

        if(a[i]>=b[i-1] && dp[i-1][1].fr!=-1) {
            if(dp[i][0].fr==-1) {
                dp[i][0].fr=dp[i-1][1].fr+1;
                dp[i][0].sc=dp[i-1][1].sc+1;
            }
            else {
                dp[i][0].fr=min(dp[i][0].fr,dp[i-1][1].fr+1);
                dp[i][0].sc=max(dp[i][0].sc,dp[i-1][1].sc+1);
            }
        }

        if(b[i]>=a[i-1] && dp[i-1][0].fr!=-1) {
            if(dp[i][1].fr==-1) {
                dp[i][1].fr=dp[i-1][0].fr;
                dp[i][1].sc=dp[i-1][0].sc;
            }
            else {
                dp[i][1].fr=min(dp[i][1].fr,dp[i-1][0].fr);
                dp[i][1].sc=max(dp[i][1].sc,dp[i-1][0].sc);
            }
        }

        if(b[i]>=b[i-1] && dp[i-1][1].fr!=-1) {
            if(dp[i][1].fr==-1) {
                dp[i][1].fr=dp[i-1][1].fr;
                dp[i][1].sc=dp[i-1][1].sc;
            }
            else {
                dp[i][1].fr=min(dp[i][1].fr,dp[i-1][1].fr);
                dp[i][1].sc=max(dp[i][1].sc,dp[i-1][1].sc);
            }
        }
    }

    //for(int i=1;i<=2*n;i++) {
    //    cout<<dp[i][0].fr<<' '<<dp[i][0].sc<<"    "<<dp[i][1].fr<<' '<<dp[i][1].sc<<endl;
    //}

    if(dp[2*n][0].fr<=n && dp[2*n][0].sc>=n) {
        vector<bool> ans;
        int cur=n,t=0;
        for(int i=2*n;i>0;i--) {
            if(t==0) {cur--;ans.pb(0);}
            else ans.pb(1);

            if(i==1) break;

            if(t==0 ) {
                if(dp[i-1][0].fr<=cur && dp[i-1][0].sc>=cur && a[i]>=a[i-1]) {
                    t=0;
                }
                else if(dp[i-1][1].fr<=cur && dp[i-1][1].sc>=cur && a[i]>=b[i-1]) {
                    t=1;
                }
            }
            else {
                if(dp[i-1][0].fr<=cur && dp[i-1][0].sc>=cur && b[i]>=a[i-1]) {
                    t=0;
                }
                else if(dp[i-1][1].fr<=cur && dp[i-1][1].sc>=cur && b[i]>=b[i-1]) {
                    t=1;
                }
            }
        }
        for(int i=2*n-1;i>=0;i--) {
            if(ans[i]==0) cout<<'A';
            else cout<<'B';
        }
    }
    else if(dp[2*n][1].fr<=n && dp[2*n][1].sc>=n) {
        vector<bool> ans;
        int cur=n,t=1;
        for(int i=2*n;i>0;i--) {
            if(t==0) {cur--;ans.pb(0);}
            else ans.pb(1);

            if(i==1) break;
            if(t==0 ) {
                if(dp[i-1][0].fr<=cur && dp[i-1][0].sc>=cur && a[i]>=a[i-1]) {
                    t=0;
                }
                else if(dp[i-1][1].fr<=cur && dp[i-1][1].sc>=cur && a[i]>=b[i-1]) {
                    t=1;
                }
            }
            else {
                if(dp[i-1][0].fr<=cur && dp[i-1][0].sc>=cur && b[i]>=a[i-1]) {
                    t=0;
                }
                else if(dp[i-1][1].fr<=cur && dp[i-1][1].sc>=cur && b[i]>=b[i-1]) {
                    t=1;
                }
            }
        }
        for(int i=2*n-1;i>=0;i--) {
            if(ans[i]==0) cout<<'A';
            else cout<<'B';
        }
    }
    else cout<<-1<<endl;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t=1;//cin>>t;
    while(t--){
        solve();
    }
}
//#endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...