#include <bits/stdc++.h>
using namespace std;
const int NM = 1e6, inf = 1e9+7;
int n, a[NM+5], b[NM+5];
int f[NM+5][2], g[NM+5][2];
void trace(int i, int j, int cur){
if (i == 0) return;
if (j == 0){
if (a[i-1] < a[i] && f[i-1][0] <= cur && g[i-1][0] >= cur) trace(i-1, 0, cur);
else trace(i-1, 1, cur);
cout << 'A';
}
else{
cur--;
if (a[i-1] < b[i] && f[i-1][0] <= cur && g[i-1][0] >= cur) trace(i-1, 0, cur);
else trace(i-1, 1, cur);
cout << 'B';
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1; i <= 2*n; i++) cin >> a[i];
for (int i = 1; i <= 2*n; i++) cin >> b[i];
for (int i = 1; i <= 2*n; i++){
f[i][0] = f[i][1] = +inf;
g[i][0] = g[i][1] = -inf;
}
for (int i = 0; i < 2*n; i++){
if (a[i] < a[i+1]){
f[i+1][0] = min(f[i+1][0], f[i][0]);
g[i+1][0] = max(g[i+1][0], g[i][0]);
}
if (a[i] < b[i+1]){
f[i+1][1] = min(f[i+1][1], f[i][0]+1);
g[i+1][1] = max(g[i+1][1], g[i][0]+1);
}
if (b[i] < a[i+1]){
f[i+1][0] = min(f[i+1][0], f[i][1]);
g[i+1][0] = max(g[i+1][0], g[i][1]);
}
if (b[i] < b[i+1]){
f[i+1][1] = min(f[i+1][1], f[i][1]+1);
g[i+1][1] = max(g[i+1][1], g[i][1]+1);
}
}
if (f[2*n][0] <= n && g[2*n][0] >= n){
trace(2*n, 0, n);
return 0;
}
if (f[2*n][1] <= n && g[2*n][1] >= n){
trace(2*n, 1, n);
return 0;
}
cout << -1;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |