#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
const int INF = 1e9;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
int len = 2 * n;
vector<int> a(len), b(len);
for (int i = 0; i < len; i++) cin >> a[i];
for (int i = 0; i < len; i++) cin >> b[i];
// dpMin[i][0] - i-binoda 'A' tanlansa, hozirgacha tanlangan 'A'larning min soni
// dpMax[i][0] - i-binoda 'A' tanlansa, hozirgacha tanlangan 'A'larning max soni
// [i][1] esa 'B' tanlangan holat uchun
vector<vector<int>> dpMin(len, vector<int>(2, INF));
vector<vector<int>> dpMax(len, vector<int>(2, -INF));
// Boshlang'ich holat
dpMin[0][0] = dpMax[0][0] = 1;
dpMin[0][1] = dpMax[0][1] = 0;
for (int i = 1; i < len; i++) {
// Hozir 'A' tanlasak (a[i])
if (a[i] >= a[i-1]) {
dpMin[i][0] = min(dpMin[i][0], dpMin[i-1][0] + 1);
dpMax[i][0] = max(dpMax[i][0], dpMax[i-1][0] + 1);
}
if (a[i] >= b[i-1]) {
dpMin[i][0] = min(dpMin[i][0], dpMin[i-1][1] + 1);
dpMax[i][0] = max(dpMax[i][0], dpMax[i-1][1] + 1);
}
// Hozir 'B' tanlasak (b[i])
if (b[i] >= a[i-1]) {
dpMin[i][1] = min(dpMin[i][1], dpMin[i-1][0]);
dpMax[i][1] = max(dpMax[i][1], dpMax[i-1][0]);
}
if (b[i] >= b[i-1]) {
dpMin[i][1] = min(dpMin[i][1], dpMin[i-1][1]);
dpMax[i][1] = max(dpMax[i][1], dpMax[i-1][1]);
}
}
// Natijani tiklash (Backtracking)
int currentA;
int lastVal = 2e9; // Juda katta son
string res = "";
if (n >= dpMin[len-1][0] && n <= dpMax[len-1][0]) currentA = 0;
else if (n >= dpMin[len-1][1] && n <= dpMax[len-1][1]) currentA = 1;
else {
cout << -1 << endl;
return 0;
}
int remainingN = n;
for (int i = len - 1; i >= 0; i--) {
if (currentA == 0) {
res += 'A';
remainingN--;
lastVal = a[i];
} else {
res += 'B';
lastVal = b[i];
}
if (i > 0) {
// Avvalgi qadamda qaysi biri to'g'ri kelishini tekshiramiz
if (a[i-1] <= lastVal && remainingN >= dpMin[i-1][0] && remainingN <= dpMax[i-1][0]) {
currentA = 0;
} else {
currentA = 1;
}
}
}
reverse(res.begin(), res.end());
cout << res << endl;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |