string最好不要用scanf
by sxy2012yutiti @ 2023-09-06 20:44:32
@[sxy2012yutiti](/user/729386) 我用cout还是re,很迷
by kbzcz @ 2023-09-06 20:55:55
@[kbzcz](/user/416192) cincout都换上,直接cin>>op,cout<<op就行了
by sxy2012yutiti @ 2023-09-06 20:58:08
@[kbzcz](/user/416192) string稍有不慎就会挂,我在这上边保龄了至少五次起步了
by sxy2012yutiti @ 2023-09-06 20:59:03
@[sxy2012yutiti](/user/729386) 还是RE,用string的地方都改了,是不是因为string不能像数组一样用
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n;
int a[N];
int q1[N],h1,t1;
int q2[N],h2,t2;
string op;
bool solve() {
int ix=1;
while(h1<=t1||h2<=t2) {
if(h1<=t1) {
if(h1!=t1&&q1[h1]==q1[t1]) {
ix++;
op.insert(ix,1,'L');op.insert(2*n-ix+1,1,'L');
h1++;t1--;
continue;
}
if(h2<=t2&&q1[t1]==q2[h2]) {
ix++;
op.insert(ix,1,'L');
op.insert(2*n-ix+1,1,'R');
t1--;h2++;
continue;
}
}
if(h2<=t2) {
if(h2!=t2&&q2[h2]==q2[t2]) {
ix++;
op.insert(ix,1,'R');op.insert(2*n-ix+1,1,'R');
h2++;t2--;
continue;
}
if(h1<=t1&&q2[t2]==q1[h1]) {
ix++;
op.insert(ix,1,'L');
op.insert(2*n-ix+1,1,'R');
t2--;h1++;
continue;
}
}
return 0;
}
return 1;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i=1;i<=2*n;i++) scanf("%d",&a[i]);
h1=h2=1;t1=t2=0;
for(int i=2;i<=2*n;i++) {
if(a[i]==a[1]) {
for(int j=i-1;j>=2;j--) q1[++t1]=a[j];
for(int j=i+1;j<=2*n;j++) q2[++t2]=a[j];
break;
}
}
op[1]=op[2*n]='L';
if(solve()) {
for(int i=1;i<=2*n;i++) cout<<op[i];
puts("");
continue;
}
h1=h2=1;t1=t2=0;
for(int i=1;i<2*n;i++) {
if(a[i]==a[2*n]) {
for(int j=i-1;j>=1;j--) q1[++t1]=a[j];
for(int j=i+1;j<2*n;j++) q2[++t2]=a[j];
break;
}
}
op[1]='R';op[2]='L';
if(solve()) {
for(int i=1;i<=2*n;i++) cout<<op[i];
puts("");
continue;
}
puts("-1");
}
return 0;
}
```
by kbzcz @ 2023-09-06 21:19:53
@[kbzcz](/user/416192) 可以这样说,但不完全是
by sxy2012yutiti @ 2023-09-06 21:25:17
@[sxy2012yutiti](/user/729386) 所以是啥
by kbzcz @ 2023-09-06 21:27:01
我回宿舍了,明天回
by kbzcz @ 2023-09-06 21:27:42
@[kbzcz](/user/416192) ok
by sxy2012yutiti @ 2023-09-06 21:34:14
@[sxy2012yutiti](/user/729386) 所以啥
by kbzcz @ 2023-09-07 12:50:27