Submission #930501

#TimeUsernameProblemLanguageResultExecution timeMemory
930501dimashhhBuilding 4 (JOI20_building4)C++17
11 / 100
115 ms256080 KiB
#include <bits/stdc++.h>

using namespace std;
const int N = 4000 + 12, MOD = 998244353;

typedef long long ll;

int n, a[N][2];
bool dp[N][2];
int dp_[N][N][2];
void test() {
    cin >> n;
    memset(dp_,-1,sizeof(dp_));
    for (int i = 1; i <= n + n; i++) {
        cin >> a[i][0];
    }
    for (int i = 1; i <= n + n; i++) {
        cin >> a[i][1];
    }
    dp[n + n][0] = dp[n + n][1] = 1;
    dp_[0][0][0] = 0;
    for (int i = n + n - 1; i >= 1; i--) {
        for (int j = 0; j <= 1; j++) {
            for (int k = 0; k <= 1; k++) {
                if (a[i][j] <= a[i + 1][k]) {
                    dp[i][j] |= dp[i + 1][k];
                }
            }
        }
    }
    if (!dp[1][0] && !dp[1][1]) {
        cout << -1;
        return;
    }
    a[n + n + 1][1] = 1e9 + 2;
    for(int i = 1;i <= n + n;i++){
        for(int j = 0;j <= 1;j++){
            for(int k = 0;k <= n;k++){
                if(j == 1){
                    if(a[i][j] >= a[i - 1][0] && dp_[i - 1][k][0] != -1){
                        dp_[i][k][1] = 0;
                    }
                    if(a[i][j] >= a[i - 1][1] && dp_[i - 1][k][1] != -1){
                        dp_[i][k][1] = 1;
                    }
                }else{
                    if(k){
                        if(a[i][j] >= a[i - 1][0] && dp_[i - 1][k - 1][0] != -1){
                            dp_[i][k][j] = 0;
                        }
                        if(a[i][j] >= a[i - 1][1] && dp_[i - 1][k - 1][1] != -1){
                            dp_[i][k][j] = 1;
                        }
                    }
                }
            }
        }
    }
    if(dp_[n + n][n][1] == -1 && dp_[n + n][n][0] == -1){
        cout << -1;
        return;
    }
    vector<char> res;
    int val = n,lst = 0;
    if(dp_[n + n][n][lst] == -1){
        lst = 1;
    }
    for(int i = n + n;i >= 1;i--){
        bool ok = false;
        if(lst == 0){
            res.push_back('A');
            ok = 1;
        }else res.push_back('B');
        lst = dp_[i][val][lst];
        val -= ok;
    }
    reverse(res.begin(),res.end());
    for(auto i:res){
        cout << i;
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int T = 1;
//    cin >> T;
    while (T--)
        test();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...