RT,求大佬帮忙看一下。
#include<bits/stdc++.h>
using namespace std;
long long n, arr[1000010], t;
struct node{
string s;
}ans[1000010];
bool cmt(node x, node y){
return x.s < y.s;
}
string solve1(long long x){
long long l1 = 1, r1 = 2 * n + 1, l2 = x, r2 = x;
string str1 = "L", str2 = "L";
for(int i = 1; i < n; i++){
if(arr[l1 + 1] == arr[l2 - 1] && l1 + 1 != l2 - 1){
str1 = str1 + "L";
str2 = "L" + str2;
l1++;
l2--;
// cout << 1;
}
else if(arr[l1 + 1] == arr[r2 + 1] && l1 + 1 != l2 && r2 + 1 != r1){
str1 = str1 + "L";
str2 = "R" + str2;
l1++;
r2++;
// cout << 2;
}
else if(arr[r1 - 1] == arr[l2 - 1] && r1 - 1 != r2 && l2 - 1 != r1){
str1 = str1 + "R";
str2 = "L" + str2;
r1--;
l2--;
// cout << 3;
}
else if(arr[r1 - 1] == arr[r2 + 1] && r2 + 1 != r1 - 1){
str1 = str1 + "R";
str2 = "R" + str2;
r1--;
r2++;
// cout << 4;
}
else return "";
}
return str1 + str2;
}
string solve2(long long x){
long long l1 = 2, r1 = 2 * n, l2 = x, r2 = x;
string str1 = "R", str2 = "L";
for(int i = 1; i < n; i++){
if(arr[l1 + 1] == arr[l2 - 1] && l1 + 1 != l2 - 1){
str1 = str1 + "L";
str2 = "L" + str2;
l1++;
l2--;
}
else if(arr[l1 + 1] == arr[r2 + 1] && l1 + 1 != l2 && r2 + 1 != r1){
str1 = str1 + "L";
str2 = "R" + str2;
l1++;
r2++;
}
else if(arr[r1 - 1] == arr[l2 - 1] && r1 - 1 != r2 && l2 - 1 != r1){
str1 = str1 + "R";
str2 = "L" + str2;
r1--;
l2--;
}
else if(arr[r1 - 1] == arr[r2 + 1] && r2 + 1 != r1 - 1){
str1 = str1 + "R";
str2 = "R" + str2;
r1--;
r2++;
}
else return "";
}
}
int main(){
// freopen("palin.in", "r", stdin);
// freopen("palin.out", "w", stdout);
cin >> t;
while(t--){
scanf("%lld", &n);
for(int i = 1; i <= 2 * n; i++){
scanf("%lld", &arr[i]);
}
long long tot = 0;
string tmp;
for(int i = 2 * n; i >= 2; i--){
if(arr[i] == arr[1])tmp = solve1(i);
if(tmp != ""){
ans[++tot].s = tmp;
}
}
for(int i = 2 * n - 1; i >= 1; i--){
if(arr[i] == arr[n * 2])tmp = solve2(i);
if(tmp != ""){
ans[++tot].s = tmp;
}
}
if(tot){
sort(ans + 1, ans + tot + 1, cmt);
cout << ans[1].s<<'\n';
}
if(!tot){
cout << -1 << '\n';
}
}
return 0;
}
//2
//5
//4 1 2 4 5 3 1 2 3 5
//3
//3 2 1 2 1 3
//1
//20
//5 20 6 12 13 18 9 17 2 7 7 18 1 11 10 15 4 6 17 19 14 10 14 13 1 16 8 3 12 8 19 20 4 16 5 3 9 2 15 11