点个关注呗!
2025-07-12 17:24:10
发布于:广东
11阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
typedef pair<ll, ll> pir;
const int N = 1e6 + 5;
int a[N * 2], n, seq[N];
pir pos[N]; // first表示左边的位置,second表示右边的位置
string construct_sequence(int start_pos, char start_char) {
string ans;
ans += start_char;
int l1, r1, l2, r2;
if (start_char == 'L') {
l1 = 1, r1 = 2 * n + 1;
l2 = pos[a[1]].second, r2 = l2;
} else {
l1 = 0, r1 = 2 * n;
l2 = pos[a[2 * n]].first, r2 = l2;
}
while (l1 < l2 && r2 < r1) {
if (r2 - l2 + 1 == n) break;
if (l1 + 2 < l2 && a[l1 + 1] == a[l2 - 1]) {
l1++, l2--, ans += 'L';
} else if (l1 + 1 < l2
&& r2 + 1 < r1 && a[l1 + 1] == a[r2 + 1]) {
l1++, r2++, ans += 'L';
} else if (r1 - 2 > r2
&& a[r1 - 1] == a[r2 + 1]) {
r1--, r2++, ans += 'R';
} else if (r1 - 1 > r2
&& l2 - 1 > l1 && a[r1 - 1] == a[l2 - 1]) {
r1--, l2--, ans += 'R';
} else {
return "-1";
}
}
int temp_l1 = 0, temp_r1 = 2 * n + 1;
for (int i = 1; i <= n; i++) {
if (ans[i - 1] == 'L')
seq[i] = a[++temp_l1];
else
seq[i] = a[--temp_r1];
}
int p = n;
while (l2 < r2) {
if (a[r2] != seq[p])
l2++, ans += 'L';
else
r2--, ans += 'R';
--p;
}
ans += 'L';
return ans;
}
void solve() {
cin >> n;
for (int i = 1; i <= n * 2; i++) pos[i] = {0, 0};
for (int i = 1; i <= 2 * n; i++) {
cin >> a[i];
if (pos[a[i]].first)
pos[a[i]].second = i;
else
pos[a[i]].first = i;
}
string ansL = construct_sequence(1, 'L');
if (ansL != "-1") {
cout << ansL << '\n';
return;
}
string ansR = construct_sequence(2 * n, 'R');
if (ansR != "-1")
cout << ansR << '\n';
else
cout << "-1"<<endl;
}
int main() {
int t;
cin >> t;
while (t--) solve();
}
这里空空如也
有帮助,赞一个