Submission #1171673

#TimeUsernameProblemLanguageResultExecution timeMemory
1171673AlgorithmWarriorBuilding 4 (JOI20_building4)C++20
100 / 100
539 ms56208 KiB
#include <bits/stdc++.h>

using namespace std;

void minself(int& x,int val){
    if(x>val)
        x=val;
}

void maxself(int& x,int val){
    if(x<val)
        x=val;
}

int const MAX=1e6+5;
int n;
int mat[2][MAX];
int le[2][MAX],ri[2][MAX];

void read(){
    cin>>n;
    int i,j;
    for(i=0;i<2;++i)
        for(j=1;j<=2*n;++j)
            cin>>mat[i][j];
}

void get_dp(){
    int i,j;
    for(j=1;j<=2*n;++j)
        for(i=0;i<2;++i){
            le[i][j]=1e9;
            ri[i][j]=-1e9;
            int lin;
            for(lin=0;lin<2;++lin)
                if(mat[lin][j-1]<=mat[i][j]){
                    minself(le[i][j],le[lin][j-1]);
                    maxself(ri[i][j],ri[lin][j-1]);
                }
            if(i==0){
                ++le[i][j];
                ++ri[i][j];
            }
        }
}

void write_path(int lin,int col,int cnt){
    if(col==0)
        return;
    int i;
    for(i=0;i<2;++i)
        if(mat[i][col-1]<=mat[lin][col] && le[i][col-1]<=cnt-(lin==0) && cnt-(lin==0)<=ri[i][col-1]){
            write_path(i,col-1,cnt-(lin==0));
            break;
        }
    cout<<((lin==0)?'A':'B');
}

void write(){
    int i;
    for(i=0;i<2;++i)
        if(le[i][2*n]<=n && n<=ri[i][2*n]){
            write_path(i,2*n,n);
            return;
        }
    cout<<-1;
}

int main()
{
    read();
    get_dp();
    write();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...