#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2005;
string dp[MAXN][MAXN][2];
int a[MAXN], b[MAXN];
int n;
string INF = string(5000, 'Z');
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
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 = 0; i <= n; i++)
for(int j = 0; j <= n; j++)
dp[i][j][0] = dp[i][j][1] = INF;
dp[1][0][0] = "A";
dp[0][1][1] = "B";
for(int i = 2; i <= 2*n; i++){
for(int j = 0; j <= min(i,n); j++){
int k = i-j;
if(k<0 || k>n) continue;
// take A
if(j>0){
if(dp[j-1][k][0] != INF && a[i]>=a[i-1])
dp[j][k][0] = min(dp[j][k][0], dp[j-1][k][0]+"A");
if(dp[j-1][k][1] != INF && a[i]>=b[i-1])
dp[j][k][0] = min(dp[j][k][0], dp[j-1][k][1]+"A");
}
// take B
if(k>0){
if(dp[j][k-1][1] != INF && b[i]>=b[i-1])
dp[j][k][1] = min(dp[j][k][1], dp[j][k-1][1]+"B");
if(dp[j][k-1][0] != INF && b[i]>=a[i-1])
dp[j][k][1] = min(dp[j][k][1], dp[j][k-1][0]+"B");
}
}
}
string ans = min(dp[n][n][0], dp[n][n][1]);
if(ans==INF) cout << -1;
else cout << ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |