제출 #952982

#제출 시각아이디문제언어결과실행 시간메모리
952982andrei_boaca건물 4 (JOI20_building4)C++17
100 / 100
204 ms45636 KiB
#include <bits/stdc++.h> using namespace std; struct date { int l,r; }; int n,a[1000005],b[1000005]; int last; char sol[1000005]; date dp[2][1000005]; /// 0 -> A, 1 -> B date plsput(date a, date b) { if(a.l==-1) return b; a.l=min(a.l,b.l); a.r=max(a.r,b.r); return a; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n; n*=2; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) cin>>b[i]; dp[0][1]={1,1}; dp[1][1]={0,0}; for(int i=2;i<=n;i++) { dp[0][i]={-1,-1}; dp[1][i]={-1,-1}; if(dp[0][i-1].l!=-1&&a[i]>=a[i-1]) dp[0][i]=plsput(dp[0][i],{dp[0][i-1].l+1,dp[0][i-1].r+1}); if(dp[1][i-1].l!=-1&&a[i]>=b[i-1]) dp[0][i]=plsput(dp[0][i],{dp[1][i-1].l+1,dp[1][i-1].r+1}); if(dp[0][i-1].l!=-1&&b[i]>=a[i-1]) dp[1][i]=plsput(dp[1][i],{dp[0][i-1].l,dp[0][i-1].r}); if(dp[1][i-1].l!=-1&&b[i]>=b[i-1]) dp[1][i]=plsput(dp[1][i],{dp[1][i-1].l,dp[1][i-1].r}); } int poz=n; int need=n/2; int last=2e9; while(poz>0) { if(dp[0][poz].l<=need&&dp[0][poz].r>=need&&a[poz]<=last) { last=a[poz]; sol[poz]='A'; need--; poz--; continue; } if(dp[1][poz].l<=need&&dp[1][poz].r>=need&&b[poz]<=last) { last=b[poz]; sol[poz]='B'; poz--; continue; } cout<<-1; return 0; } for(int i=1;i<=n;i++) cout<<sol[i]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...