Submission #1204162

#TimeUsernameProblemLanguageResultExecution timeMemory
1204162avighnaBuilding 4 (JOI20_building4)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h>

int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);

  const int inf = 1e9 + 1;

  int n;
  std::cin >> n;
  std::vector<int> a(2 * n), b(2 * n);
  for (auto &i : a) {
    std::cin >> i;
  }
  for (auto &i : b) {
    std::cin >> i;
  }
  a.push_back(inf), b.push_back(inf);

  std::vector dp(2 * n + 1, std::vector(n + 1, std::vector(3, true)));
  for (int i = 2 * n; i >= 0; --i) {
    for (int j = 0; j <= n; ++j) {
      for (int k = 0; k < 3; ++k) {
        dp[i][j][k] = false;
        if (i == 2 * n and j != n) {
          continue;
        }
        int a_o = a[i], b_o = b[i];
        if (j == n) {
          k = 2;
        }
        if (k == 1) {
          b[i] = inf + 1;
        }
        if (k == 2) {
          a[i] = inf + 1;
        }
        if (a[i] <= a[i + 1] and a[i] <= b[i + 1]) {
          dp[i][j][k] = dp[i][j][k] or dp[i + 1][j + 1][0];
        }
        if (a[i] <= a[i + 1]) {
          dp[i][j][k] = dp[i][j][k] or dp[i + 1][j + 1][1];
        }
        if (a[i] <= b[i + 1]) {
          dp[i][j][k] = dp[i][j][k] or dp[i + 1][j + 1][2];
        }
        if (b[i] <= a[i + 1] and b[i] <= b[i + 1]) {
          dp[i][j][k] = dp[i][j][k] or dp[i + 1][j][0];
        }
        if (b[i] <= a[i + 1]) {
          dp[i][j][k] = dp[i][j][k] or dp[i + 1][j][1];
        }
        if (b[i] <= b[i + 1]) {
          dp[i][j][k] = dp[i][j][k] or dp[i + 1][j][2];
        }
        a[i] = a_o, b[i] = b_o;
      }
    }
  }

  if (!dp[0][0][0]) {
    std::cout << "-1\n";
    return 0;
  }
  std::string ans;
  for (int i = 0, j = 0, k = 0; i < 2 * n; ++i) {
    int a_o = a[i], b_o = b[i];
    if (j == n) {
      k = 2;
    }
    if (k == 1) {
      b[i] = inf + 1;
    }
    if (k == 2) {
      a[i] = inf + 1;
    }
    if (a[i] <= a[i + 1] and a[i] <= b[i + 1] and dp[i + 1][j + 1][0]) {
      ans.push_back('A');
      j++, k = 0;
    } else if (a[i] <= a[i + 1] and dp[i + 1][j + 1][1]) {
      ans.push_back('A');
      j++, k = 1;
    } else if (a[i] <= b[i + 1] and dp[i + 1][j + 1][2]) {
      ans.push_back('A');
      j++, k = 2;
    } else if (b[i] <= a[i + 1] and dp[i + 1][j][0]) {
      ans.push_back('B');
      k = 0;
    } else if (b[i] <= a[i + 1] and dp[i + 1][j][1]) {
      ans.push_back('B');
      k = 1;
    } else if (b[i] <= b[i + 1] and dp[i + 1][j][2]) {
      ans.push_back('B');
      k = 2;
    }
    a[i] = a_o, b[i] = b_o;
  }
  std::cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...