Submission #1170619

#TimeUsernameProblemLanguageResultExecution timeMemory
1170619laureBuilding 4 (JOI20_building4)C++20
0 / 100
3 ms840 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,cnt;
vector<int>a;
vector<int>b;
vector<vector<int>>dp(4005,vector<int>(4,0));
vector<char>s,ans;
void solve(int ind,int t)
{
    if(t==0||t==1){s.push_back('A');cnt++;}
    else s.push_back('B');
    if(s.size()==n&&cnt==n/2)
    {
        ans=s;
        return;
    }
    if(t==0||t==3)
    {
        if(dp[ind+1][0])solve(ind+1,0);
        if(dp[ind+1][1])solve(ind+1,1);
    }
    if(t==1||t==2)
    {
        if(dp[ind+1][2])solve(ind+1,2);
        if(dp[ind+1][3])solve(ind+1,3);
    }
    if(t==0||t==1){s.pop_back();cnt--;}
    else s.pop_back();
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    n*=2;
    a.resize(n);
    b.resize(n);
    for(int i=0;i<n;i++)cin>>a[i];
    for(int i=0;i<n;i++)cin>>b[i];
    for(int i=0;i<4;i++)dp[n-1][i]=1;
    for(int i=n-2;i>=0;i--)
    {
        if(a[i]<=a[i+1]&&(dp[i+1][0]||dp[i+1][1]))dp[i][0]=1;
        if(a[i]<=b[i+1]&&(dp[i+1][3]||dp[i+1][2]))dp[i][1]=1;
        if(b[i]<=b[i+1]&&(dp[i+1][2]||dp[i+1][3]))dp[i][2]=1;
        if(b[i]<=a[i+1]&&(dp[i+1][0]||dp[i+1][1]))dp[i][3]=1;
    }
    for(int i=0;i<4;i++)
    {
        if(dp[0][i])
        {
            cnt=0;
            s.clear();
            solve(0,i);
        }
        if(!ans.empty())break;
    }
    if(ans.empty())cout<<-1;
    else for(auto u:ans)cout<<u;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...