Submission #999702

#TimeUsernameProblemLanguageResultExecution timeMemory
999702UnforgettableplBuilding 4 (JOI20_building4)C++17
100 / 100
193 ms44528 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<int> A(2*n+2); vector<int> B(2*n+2); A[2*n+1]=B[2*n+1]=1e9; vector<bool> chosen(2*n+1); vector<int> val(2*n+2);val[2*n+1]=1e9; for(int i=1;i<=2*n;i++)cin>>A[i]; for(int i=1;i<=2*n;i++)cin>>B[i]; int cntB = 0; for(int i=1;i<=2*n;i++){ if(A[i]<=B[i]){ if(A[i]>=val[i-1])val[i]=A[i]; else if(B[i]>=val[i-1]){ chosen[i]=true; val[i]=B[i]; cntB++; } else { cout << "-1\n"; return 0; } } else { if(B[i]>=val[i-1]){ chosen[i]=true; val[i]=B[i]; cntB++; } else if(A[i]>=val[i-1])val[i]=A[i]; else { cout << "-1\n"; return 0; } } } int cntA = 2*n-cntB; int end = -1; int cost = 0; if(cntA<cntB){ int target = n-cntA; for(int i=2*n;i;i--){ if(target==0)break; if((A[i]<B[i] and chosen[i]) or (A[i]>B[i] and !chosen[i])){end=-1;cost=0;continue;} // Already maximum if(max(A[i],B[i])>max(A[i+1],B[i+1])){end=-1;cost=0;continue;} // Can't be flipped if(max(A[i],B[i])<=val[i+1]){end=i;cost=0;} else if(end==-1)continue; if(chosen[i])cost++; else cost--; if(cost==1){ for(int j=i;j<=end;j++){ chosen[j]=!chosen[j]; val[j]=max(A[j],B[j]); } target--; cost = 0; end = -1; } } if(target!=0){ cout << "-1\n"; return 0; } } else if(cntB<cntA){ int target = n-cntB; for(int i=2*n;i;i--){ if(target==0)break; if((A[i]<B[i] and chosen[i]) or (A[i]>B[i] and !chosen[i])){end=-1;cost=0;continue;} // Already maximum if(max(A[i],B[i])>max(A[i+1],B[i+1])){end=-1;cost=0;continue;} // Can't be flipped if(max(A[i],B[i])<=val[i+1]){end=i;cost=0;} else if(end==-1)continue; if(chosen[i])cost--; else cost++; if(cost==1){ for(int j=i;j<=end;j++){ chosen[j]=!chosen[j]; val[j]=max(A[j],B[j]); } target--; cost = 0; end = -1; } } if(target!=0){ cout << "-1\n"; return 0; } } for(int i=1;i<=2*n;i++)cout<<(chosen[i]?'B':'A'); cout << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...