语言选择会影响正确性?
查看原帖
语言选择会影响正确性?
246954
xj22yangyichen楼主2022/10/26 21:13

同样的代码用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;
}
2022/10/26 21:13
加载中...