제출 #1369900

#제출 시각아이디문제언어결과실행 시간메모리
1369900Born_To_Laugh건물 4 (JOI20_building4)C++17
100 / 100
147 ms52320 KiB
// Born_To_Laugh - Hughie Do
#include <bits/stdc++.h>
#define alle(AC) AC.begin(), AC.end()
#define fi first
#define se second
using namespace std;
typedef long long ll;
[[maybe_unused]] const int MOD = 998244353, INF = 1e9 + 7;
const int maxn = 1e6 + 10;
int n;
ll ma[maxn][2], mi[maxn][2];//maxa to use, mina to use
//0 = b, 1 = a
ll a[maxn], b[maxn];
int state[maxn];
void solve(){
    cin >> n;
    for(int i=1; i<=n << 1; ++i) cin >> a[i];
    for(int i=1; i<=n << 1; ++i) cin >> b[i];
    for(int i=1; i<=n << 1; ++i){
        mi[i][0] = mi[i][1] = INF;
        ma[i][0] = ma[i][1] = -INF;
        if(a[i] >= a[i - 1]){
            ma[i][1] = max(ma[i][1], ma[i - 1][1] + 1);
            mi[i][1] = min(mi[i][1], mi[i - 1][1] + 1);
        }
        if(a[i] >= b[i - 1]){
            ma[i][1] = max(ma[i][1], ma[i - 1][0] + 1);
            mi[i][1] = min(mi[i][1], mi[i - 1][0] + 1);
        }
        if(b[i] >= a[i - 1]){
            ma[i][0] = max(ma[i][0], ma[i - 1][1]);
            mi[i][0] = min(mi[i][0], mi[i - 1][1]);
        }
        if(b[i] >= b[i - 1]){
            ma[i][0] = max(ma[i][0], ma[i - 1][0]);
            mi[i][0] = min(mi[i][0], mi[i - 1][0]);
        }
    }
    bool ok = (ma[n << 1][0] >= n && mi[n << 1][0] <= n)
    | (ma[n << 1][1] >= n && mi[n << 1][1] <= n);
    if(!ok){
        cout << -1 << '\n';
        return;
    }
    int cnt = n;

    for(int i=n << 1; i>=1; --i){
        state[i] = 0;
        if((ma[i][1] >= cnt && mi[i][1] <= cnt)){
            if((i == n << 1) || (state[i + 1] == 0 && a[i] <= b[i + 1])
            || (state[i + 1] == 1 && a[i] <= a[i + 1])){
                state[i] = 1;
                cnt--;
            }
        }
    }
    for(int i=1; i<=n << 1; ++i){
        if(state[i]) cout << 'A';
        else cout << 'B';
    }
}
signed main(){
    // freopen("inp.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…