#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |