Submission #925127

# Submission time Handle Problem Language Result Execution time Memory
925127 2024-02-10T19:46:12 Z AlphaMale06 Building 4 (JOI20_building4) C++14
0 / 100
1 ms 4444 KB
#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){
    if(p1.F<0 && p2.F<0)return {-1e9, -1e9};
    if(p1.F<0)return p2;
    if(p2.F<0)return p1;
    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]={-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];
        if(dp[i][0].F<0 && dp[i][1].F<0){
            cout << -1 << '\n';
            return 0;
        }
    }
    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 time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Incorrect 1 ms 4444 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Incorrect 1 ms 4444 KB Output isn't correct
3 Halted 0 ms 0 KB -