제출 #529715

#제출 시각아이디문제언어결과실행 시간메모리
529715Koosha_mv건물 4 (JOI20_building4)C++14
11 / 100
187 ms8364 KiB
#include <bits/stdc++.h> using namespace std; #define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl #define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl #define erorp(x) cout<<#x<<"={"<<(x.F)<<" , "<<x.S<<"}"<<endl #define eror(x) cout<<#x<<'='<<(x)<<endl #define f_(i,a,b) for(int i=a;i>=b;i--) #define f(i,a,b) for(int i=a;i<b;i++) #define nb(x) __builtin_popcount(x) #define all(v) v.begin(),v.end() #define bit(n,k) (((n)>>(k))&1) #define Add(x,y) x=(x+y)%mod #define maxm(a,b) a=max(a,b) #define minm(a,b) a=min(a,b) #define lst(x) x[x.size()-1] #define sz(x) int(x.size()) #define mp make_pair #define ll long long #define pb push_back #define S second #define F first const int N=5e5+99,S=2,inf=1e9+9; int n,t,a[N][S],L[N][2],R[N][2],seg[N<<2][S]; string ans; void solve(int id,int x,int nxt){ if(id==0) return ; f(i,0,S){ if(a[id][i]<=nxt && L[id][i]<=x && x<=R[id][i]){ ans+=char('A'+i); solve(id-1,x-i,a[id][i]); return ; } } //assert(0); } int main(){ cin>>n; n<<=1; f(i,1,n+1) cin>>a[i][0]; f(i,1,n+1) cin>>a[i][1]; L[1][0]=R[1][0]=0; L[1][1]=R[1][1]=1; f(i,2,n+1){ L[i][0]=L[i][1]=N; R[i][0]=R[i][1]=-N; f(p,0,S){ f(k,0,S){ if(a[i-1][p]>a[i][k]) continue ; minm(L[i][k],L[i-1][p]+k); maxm(R[i][k],R[i-1][p]+k); } } } f(i,0,S){ if(L[n][i]<=n/2 && n/2<=R[n][i]) break; if(i==1){ return cout<<-1,0; } } solve(n,n/2,inf); reverse(all(ans)); cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...