同样的代码用C和C++提交,分别得到了WA和AC,请问这是为什么?
#include<stdio.h>
#include<ctype.h>
int read(){
char ch = getchar();
int ret = 0;
while(!isdigit(ch)){
ch = getchar();
}
while(isdigit(ch)){
ret *= 10;
ret += ch - '0';
ch = getchar();
}
return ret;
}
int T, n, a[1000001], cnt, l[500001], r[500001], have[500001], ans[1000001], cnt_sec, f;
int main(){
T = read();
while(T--){
n = read();
for(int i = 1; i <= n; i++){
have[i] = 0;
}
cnt = cnt_sec = f = 0;
for(int i = 1; i <= 2 * n; i++){
a[i] = read();
}
for(int i = 2 * n; i > n; i--){
if(!have[a[i]]){
cnt++;
}
have[a[i]]++;
}
if(cnt == n){
l[++cnt_sec] = n + 1;
r[cnt_sec] = n * 2;
}
for(int i = n; i >= 1; i--){
if(!have[a[i]]){
cnt++;
}
have[a[i]]++;
if(have[a[i + n]] == 1){
cnt--;
}
have[a[i + n]]--;
if(cnt == n){
l[++cnt_sec] = i;
r[cnt_sec] = i + n - 1;
}
}
for(int i = 1; i <= cnt_sec; i++){
int ll = l[i] - 1, rr = r[i] + 1, ml = l[i], mr = r[i], ff = 1, cnt_ans = 0;
while(ml <= mr){
if(a[rr] == a[ml] && rr <= 2 * n){
cnt_ans++;
ans[n - cnt_ans + 1] = 0;
ans[n + cnt_ans] = 1;
rr++;
ml++;
} else if(a[rr] == a[mr] && rr <= 2 * n){
cnt_ans++;
ans[n - cnt_ans + 1] = 0;
ans[n + cnt_ans] = 0;
rr++;
mr--;
} else if(a[ll] == a[ml] && ll >= 1){
cnt_ans++;
ans[n - cnt_ans + 1] = 1;
ans[n + cnt_ans] = 1;
ll--;
ml++;
} else if(a[ll] == a[mr] && ll >= 1){
cnt_ans++;
ans[n - cnt_ans + 1] = 1;
ans[n + cnt_ans] = 0;
ll--;
mr--;
} else {
ff = 0;
break;
}
}
if(ff){
f = 1;
for(int i = 1; i <= 2 * n; i++){
if(ans[i]){
putchar('L');
} else {
putchar('R');
}
}
putchar(10);
}
if(f){
break;
}
}
if(!f){
puts("-1");
}
}
return 0;
}