Submission #892774

#TimeUsernameProblemLanguageResultExecution timeMemory
892774amirhoseinfar1385Building 4 (JOI20_building4)C++17
100 / 100
192 ms45560 KiB
#include<bits/stdc++.h> using namespace std; const int maxn=1000000+10; int n; int dpl[maxn][2],dpr[maxn][2],all[maxn][2]; string res; void cal(int ind,int vas,int ted=n){ if(vas==1){ res.push_back('B'); ted--; } else{ res.push_back('A'); } if(ind==0){ return ; } if(all[ind-1][vas]<=all[ind][vas]&&dpl[ind-1][vas]<=ted&&dpr[ind-1][vas]>=ted){ return cal(ind-1,vas,ted); } return cal(ind-1,vas^1,ted); } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; n*=2; for(int i=0;i<n;i++){ cin>>all[i][0]; } for(int i=0;i<n;i++){ cin>>all[i][1]; } dpl[0][0]=dpr[0][0]=0; dpl[0][1]=dpr[0][1]=1; for(int i=1;i<n;i++){ for(int j=0;j<2;j++){ dpl[i][j]=maxn+10; dpr[i][j]=-1; if(dpr[i-1][j]!=-1&&all[i-1][j]<=all[i][j]){ dpl[i][j]=dpl[i-1][j]; dpr[i][j]=dpr[i-1][j]; } if(dpr[i-1][j^1]!=-1&&all[i-1][j^1]<=all[i][j]){ dpl[i][j]=min(dpl[i][j],dpl[i-1][j^1]); dpr[i][j]=max(dpr[i][j],dpr[i-1][j^1]); } if(dpr[i][j]!=-1&&j==1){ dpr[i][j]++; dpl[i][j]++; } // cout<<i<<" "<<j<<" "<<dpl[i][j]<<" "<<dpr[i][j]<<"\n"; } } n/=2; if(n>=dpl[2*n-1][0]&&n<=dpr[2*n-1][0]){ cal(2*n-1,0); reverse(res.begin(),res.end()); cout<<res<<"\n"; return 0; } if(n>=dpl[2*n-1][1]&&n<=dpr[2*n-1][1]){ cal(2*n-1,1); reverse(res.begin(),res.end()); cout<<res<<"\n"; return 0; } cout<<-1<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...