제출 #1170966

#제출 시각아이디문제언어결과실행 시간메모리
1170966laure건물 4 (JOI20_building4)C++20
11 / 100
368 ms589824 KiB
#include<bits/stdc++.h> #define int long long using namespace std; signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; n*=2; vector<int>a(n+1,0),b(n+1,0); for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++)cin>>b[i]; int dp[n+1][n/2+1][2]; for(int i=0;i<=n;i++) { for(int j=0;j<=n/2;j++) { dp[i][j][0]=0; dp[i][j][1]=0; } } dp[0][0][0]=1; dp[0][0][1]=1; for(int i=1;i<=n;i++) { for(int j=max(0ll,i-(n/2));j<=min(i,n/2);j++) { if(j>0)dp[i][j][0]=(a[i-1]<=a[i]&&dp[i-1][j-1][0])||(b[i-1]<=a[i]&&dp[i-1][j-1][1]); if(j<i)dp[i][j][1]=(a[i-1]<=b[i]&&dp[i-1][j][0])||(b[i-1]<=b[i]&&dp[i-1][j][1]); } } if(dp[n][n/2][0]==0&&dp[n][n/2][1]==0) { cout<<-1<<'\n'; return 0; } int i=n,k,j=n/2; vector<char>s; if(dp[i][j][0]){k=0;s.push_back('A');} else {k=1;s.push_back('B');} while(i>1) { if(!k) { if(b[i-1]<=a[i]&&dp[i-1][j-1][1])k=1; j--; } else { if(a[i-1]<=b[i]&&dp[i-1][j][0])k=0; } if(k)s.push_back('B'); else {s.push_back('A');} i--; } reverse(s.begin(),s.end()); for(auto u:s)cout<<u; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...