Submission #1314708

#TimeUsernameProblemLanguageResultExecution timeMemory
1314708darsh_sodani007Building 4 (JOI20_building4)C++17
100 / 100
168 ms33768 KiB
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define pb push_back
#define a first
#define b second
typedef long long llo;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n;
    llo aa[2*n];
    for (int i=0;i<2*n;i++){
        cin >> aa[i];
    }
    llo bb[2*n];
    for (int i=0;i<2*n;i++){
        cin >> bb[i];
    }
    pair<int,int> dp[2*n+1][2];
    dp[0][0]={0,0};
    dp[0][1]={0,0};
    dp[1][0]={1,1};
    dp[1][1]={0,0};
    for (int i=2;i<=2*n;i++){
        dp[i][0]={2*n+1,-2*n-1};
        dp[i][1]={2*n+1,-2*n-1};
    }
    for (int i=2;i<=2*n;i++){
        if (aa[i-1]>=aa[i-2]){
            dp[i][0].a=min(dp[i][0].a,dp[i-1][0].a+1);
            dp[i][0].b=max(dp[i][0].b,dp[i-1][0].b+1);
        }
        if (aa[i-1]>=bb[i-2]){
            dp[i][0].a=min(dp[i][0].a,dp[i-1][1].a+1);
            dp[i][0].b=max(dp[i][0].b,dp[i-1][1].b+1);
        }
        if (bb[i-1]>=aa[i-2]){
            dp[i][1].a=min(dp[i][1].a,dp[i-1][0].a);
            dp[i][1].b=max(dp[i][1].b,dp[i-1][0].b);
        }
        if (bb[i-1]>=bb[i-2]){
            dp[i][1].a=min(dp[i][1].a,dp[i-1][1].a);
            dp[i][1].b=max(dp[i][1].b,dp[i-1][1].b);
        }
    }
    int h=n;
    llo g=1e18;
    string v="";
    if (n<min(dp[2*n][0].a,dp[2*n][1].a) or n>max(dp[2*n][0].b,dp[2*n][1].b)){
        cout<<-1<<endl;
    }
    else{
        bool pos=true;
        for (int i=2*n;i>=1;i--){
            if (!pos){
                break;
            }
            if (h>0 and g>=aa[i-1] and h>=dp[i][0].a and h<=dp[i][0].b){
                v+='A';
                g=aa[i-1];
                h--;
            }
            else if (g>=bb[i-1] and h>=dp[i][1].a and h<=dp[i][1].b){
                v+='B';
                g=bb[i-1];
            }
            else{
                cout<<-1<<endl;
                pos=false;
                break;
            }
        }
        if (pos){
            reverse(v.begin(),v.end());
            cout<<v<<endl;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...