关于RE
查看原帖
关于RE
416192
kbzcz楼主2023/9/6 20:41

本人不会用string,不知道为什么存操作用string就RE,char数组才AC。求问。 string:

#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[ix]=op[2*n+1-ix]='L';
				h1++;t1--;
				continue;
			}
			if(h2<=t2&&q1[t1]==q2[h2]) {
				ix++;
				op[ix]='L';
				op[2*n+1-ix]='R';
				t1--;h2++;
				continue;
			}
		}
		if(h2<=t2) {
			if(h2!=t2&&q2[h2]==q2[t2]) {
				ix++;
				op[ix]=op[2*n+1-ix]='R';
				h2++;t2--;
				continue;
			}
			if(h1<=t1&&q2[t2]==q1[h1]) {
				ix++;
				op[ix]='R';
				op[2*n-ix+1]='L';
				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++) printf("%c",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++) printf("%c",op[i]);
			puts("");
			continue;
		}
		puts("-1");
	}
	return 0;
}

char :

#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;
char op[N];
bool solve() {
	int ix=1;
	while(h1<=t1||h2<=t2) {
		if(h1<=t1) {
			if(h1!=t1&&q1[h1]==q1[t1]) {
				ix++;
				op[ix]=op[2*n+1-ix]='L';
				h1++;t1--;
				continue;
			}
			if(h2<=t2&&q1[t1]==q2[h2]) {
				ix++;
				op[ix]='L';
				op[2*n+1-ix]='R';
				t1--;h2++;
				continue;
			}
		}
		if(h2<=t2) {
			if(h2!=t2&&q2[h2]==q2[t2]) {
				ix++;
				op[ix]=op[2*n+1-ix]='R';
				h2++;t2--;
				continue;
			}
			if(h1<=t1&&q2[t2]==q1[h1]) {
				ix++;
				op[ix]='R';
				op[2*n-ix+1]='L';
				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++) printf("%c",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++) printf("%c",op[i]);
			puts("");
			continue;
		}
		puts("-1");
	}
	return 0;
}

2023/9/6 20:41
加载中...