#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+100;
int a[N][2];
int dpmi[N][2]; // dp[i][0] at A [1] at B
int dpmx[N][2]; // dp[i][0] at A [1] at B
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=2*n;i++)
{
cin>>a[i][1];
}
for(int i=1;i<=2*n;i++)
{
cin>>a[i][0];
}
dpmi[1][0]=0;
dpmi[1][1]=1;
dpmx[1][0]=0;
dpmx[1][1]=1;
// B
// A
for(int i=2;i<=2*n;i++)
{
for(int k=0;k<2;k++)
{
dpmx[i][k]=-1e9,dpmi[i][k]=1e9;
for(int j=0;j<2;j++)
{
if(a[i-1][j]<=a[i][k])
{
dpmx[i][k]=max(dpmx[i][k],dpmx[i-1][j]+k);
dpmi[i][k]=min(dpmi[i][k],dpmi[i-1][j]+k);
}
}
}
}
// if(n<min(dpmi[2*n][0],dpmi[2*n][1]) or max(dpmx[2*n][0],dpmx[2*n][1])<n)
// {
// cout<<-1<<endl;
// }
// else
// {
if(dpmi[2*n][0]<=n and n<=dpmx[2*n][0])
{
// We will start at a[i][0]
// 0 is B and 1 is A
int p=0;
int cnt=p;
string ans="B";
for(int i=2*n-1;i>=1;i--)
{
for(int j=0;j<2;j++)
{
if(dpmi[i][j]+cnt<=n and n<=dpmx[i][j]+cnt)
{
ans+=(j?'A':'B');
cnt+=j;
break;
}
}
}
reverse(begin(ans),end(ans));
cout<<ans<<endl;
}
else if(dpmi[2*n][1]<=n and n<=dpmx[2*n][1])
{
int p=1;
int cnt=p;
string ans="A";
for(int i=2*n-1;i>=1;i--)
{
for(int j=0;j<2;j++)
{
if(dpmi[i][j]+cnt<=n and n<=dpmx[i][j]+cnt)
{
ans+=(j?'A':'B');
cnt+=j;
break;
}
}
}
reverse(begin(ans),end(ans));
cout<<ans<<endl;
}
else
{
cout<<-1<<endl;
}
// }
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |