제출 #925119

#제출 시각아이디문제언어결과실행 시간메모리
925119AlphaMale06건물 4 (JOI20_building4)C++17
0 / 100
1 ms4444 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second pair<int, int> uni(pair<int, int> p1, pair<int, int> p2){ return {min(p1.F, p2.F), max(p1.S, p2.S)}; } const int N =1e6+3; int a[N], b[N]; pair<int, int> dp[N][2]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; n<<=1; for(int i=0; i< n; i++)cin >> a[i]; for(int i=0; i< n; i++)cin >> b[i]; dp[0][0]={1, 1}; dp[0][1]={0, 0}; for(int i=1; i<n; i++){ dp[i][0]=dp[i][1]={-1e9, -1e9}; if(a[i]>=a[i-1] && a[i]>=b[i-1]){ dp[i][0]=uni(dp[i-1][0], dp[i-1][1]); } else if(a[i]>=a[i-1]){ dp[i][0]=dp[i-1][0]; } else if(a[i]>=b[i]){ dp[i][0]=dp[i-1][1]; } dp[i][0].F++; dp[i][0].S++; if(b[i]>=a[i-1] && b[i]>=b[i-1]){ dp[i][1]=uni(dp[i-1][0], dp[i-1][1]); } else if(b[i]>=a[i-1])dp[i][1]=dp[i-1][0]; else if(b[i]>=b[i-1])dp[i][1]=dp[i-1][1]; } pair<int, int> ans={-1, -1}; bool let=0; string cons=""; int cnt=n/2; if(dp[n-1][0].F<=n/2 && dp[n-1][0].S>=n/2){ ans=dp[n-1][0]; cnt--; cons+='A'; } else if(dp[n-1][1].F<=n/2 && dp[n-1][1].S>=n/2){ ans=dp[n-1][1]; let=1; cons+='B'; } else{ cout << -1 << '\n'; return 0; } for(int i=n-2; i>=0; i--){ if(let)swap(a[i+1], b[i+1]); if(a[i+1]>=a[i] && dp[i][0].F<=cnt && dp[i][0].S>=cnt){ cnt--; let=0; cons+='A'; continue; } let=1; cons+='B'; } reverse(cons.begin(), cons.end()); cout << cons << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...