Submission #926136

#TimeUsernameProblemLanguageResultExecution timeMemory
926136AlphaMale06Building 4 (JOI20_building4)C++14
100 / 100
237 ms69056 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second #define int long long 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]; signed 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]={2e9, -2e9}; 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-1]){ 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]; } bool let=0; string cons=""; int cnt=n/2; if(dp[n-1][0].F<=n/2 && dp[n-1][0].S>=n/2){ cnt--; cons+='A'; } else if(dp[n-1][1].F<=n/2 && dp[n-1][1].S>=n/2){ let=1; cons+='B'; } for(int i=n-1; i>=1; i--){ if(let)swap(a[i], b[i]); if(a[i-1]<=a[i] && cnt && dp[i-1][0].F<=cnt && dp[i-1][0].S>=cnt){ if(let)swap(a[i], b[i]); cons+='A'; let=0; cnt--; } else{ if(let)swap(a[i], b[i]); cons+='B'; let=1; } } reverse(cons.begin(), cons.end()); int prev=0; for(int i = 0; i< n; i++){ if(cons[i]=='A'){ if(a[i]>=prev){ prev=a[i]; } else prev=2e9; } else{ if(b[i]>=prev){ prev=b[i]; } else prev=2e9; } } if(prev==2e9 || cons.size()!=n || cnt!=0){ cout << -1 << '\n'; return 0; } cout << cons << '\n'; }

Compilation message (stderr)

building4.cpp: In function 'int main()':
building4.cpp:88:32: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   88 |     if(prev==2e9 || cons.size()!=n || cnt!=0){
      |                     ~~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...