제출 #703087

#제출 시각아이디문제언어결과실행 시간메모리
703087Darren0724건물 4 (JOI20_building4)C++17
100 / 100
268 ms34132 KiB
#include<bits/stdc++.h> using namespace std; #define all(x) x.begin(),x.end() const int INF=1e9; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n;cin>>n; int m=n*2; vector<int> a(m+1),b(m+1); for(int i=1;i<=m;i++){ cin>>a[i]; } for(int i=1;i<=m;i++){ cin>>b[i]; } vector<vector<int>> dp(4,vector<int>(m+1)); for(int i=1;i<=m;i++){ dp[0][i]=dp[2][i]=INF; dp[1][i]=dp[3][i]=-INF; } for(int i=1;i<=m;i++){ if(a[i]>=a[i-1]){ dp[0][i]=min(dp[0][i],dp[0][i-1]+1); dp[1][i]=max(dp[1][i],dp[1][i-1]+1); } if(a[i]>=b[i-1]){ dp[0][i]=min(dp[0][i],dp[2][i-1]+1); dp[1][i]=max(dp[1][i],dp[3][i-1]+1); } if(b[i]>=a[i-1]){ dp[2][i]=min(dp[2][i],dp[0][i-1]); dp[3][i]=max(dp[3][i],dp[1][i-1]); } if(b[i]>=b[i-1]){ dp[2][i]=min(dp[2][i],dp[2][i-1]); dp[3][i]=max(dp[3][i],dp[3][i-1]); } } int idx=-1; if(n>=dp[0][m]&&n<=dp[1][m]){ idx=0; } if(n>=dp[2][m]&&n<=dp[3][m]){ idx=1; } if(idx==-1){ cout<<-1<<endl; return 0; } vector<char> ans(m+1); int need=n; for(int i=m;i>0;i--){ if(idx==0){ need--; ans[i]='A'; if(a[i]>=a[i-1]&&dp[0][i-1]<=need&&dp[1][i-1]>=need){ idx=0; } else{ idx=1; } } else{ ans[i]='B'; if(b[i]>=a[i-1]&&dp[0][i-1]<=need&&dp[1][i-1]>=need){ idx=0; } else{ idx=1; } } } for(int i=1;i<=m;i++){ cout<<ans[i]; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...