제출 #380402

#제출 시각아이디문제언어결과실행 시간메모리
380402FidiskBuilding 4 (JOI20_building4)C++14
11 / 100
178 ms268012 KiB
#include <bits/stdc++.h> using namespace std; #define oo 1e15 #define fi first #define se second #define sp(iiii) setprecision(iiii) #define IO ios_base::sync_with_stdio(false); cin.tie(0) #define ms(aaaa,xxxx) memset(aaaa,xxxx,sizeof(aaaa)) #define cntbit(xxxx) __builtin_popcount(xxxx) #define getbit(xxxx,aaaa) ((xxxx>>(aaaa-1))&1) typedef long double ld; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<pair<int,int>,int> piii; typedef pair<long long,long long> pll; typedef pair<pair<long long,long long>,long long> plll; typedef pair<pair<long long,long long>,pair<long long,long long>> pllll; typedef pair<pair<long long,long long>,bool> pllb; const ll base=361; const ll mod=1e9+7; const ld eps=1e-5; const ll maxn=1e7-1; ll n,i,a[500009],b[500009],f[5009][5009][4],j; void Trace(ll x,ll y,ll msk) { if (x==0) { return; } if (msk==1) { if (f[x-1][y-1][0]&&b[x]>=a[x-1]) { Trace(x-1,y-1,0); } else { Trace(x-1,y-1,1); } cout<<'B'; } else { if (f[x-1][y][0]&&a[x]>=a[x-1]) { Trace(x-1,y,0); } else { Trace(x-1,y,1); } cout<<'A'; } } int main(){ IO; cin>>n; for (i=1;i<=2*n;i++) { cin>>a[i]; } for (i=1;i<=2*n;i++) { cin>>b[i]; } if (n<=2000) { f[0][0][1]=true; f[0][0][0]=true; for (i=1;i<=2*n;i++) { for (j=0;j<=n;j++) { if (a[i]>=a[i-1]) { f[i][j][0]|=f[i-1][j][0]; } if (a[i]>=b[i-1]) { f[i][j][0]|=f[i-1][j][1]; } if (b[i]>=a[i-1]) { f[i][j][1]|=f[i-1][j-1][0]; } if (b[i]>=b[i-1]) { f[i][j][1]|=f[i-1][j-1][1]; } } } if (f[2*n][n][0]) { Trace(2*n,n,0); } else if (f[2*n][n][1]) { Trace(2*n,n,1); } else { cout<<-1; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...