Submission #926120

# Submission time Handle Problem Language Result Execution time Memory
926120 2024-02-12T15:09:31 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){
    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]){
            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>=2e9 && dp[i][1].F>=2e9){
            cout << -1 << '\n';
            return 0;
        }
    }
    pair<int, int> ans;
    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-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--;
            continue;
        }
        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){
        cout << -1 << '\n';
        return 0;
    }
    assert(cnt==0);
    cout << cons << '\n';

}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4440 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4444 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Incorrect 1 ms 4444 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4440 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 1 ms 4444 KB Output is correct
4 Correct 1 ms 4444 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Incorrect 1 ms 4444 KB Output isn't correct
7 Halted 0 ms 0 KB -