论我的代码为什么subtask1TLE了,玄关
查看原帖
论我的代码为什么subtask1TLE了,玄关
365777
halehu楼主2023/8/4 17:03

rt,dalao麻烦康康,记录

代码给了:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int t,n,a[N],b[N],c[N];
bool judge(){
	for(int i=0;i<=1;i++){
		int f = 1;
		for(int j=1;j<=n/2;j++)
	    	if(b[i + j] != c[j]){
	    		f = 0;
	    		break;
			}
		if(f) return 1;
	} 
	return 0;
}
int main(){
	scanf("%d",&t);
	while(t --){
		memset(a,-1,sizeof a);
		scanf("%d",&n);
		for(int i=1;i<=n;i++) scanf("%d",&a[i]);
		if((n & 1) == 0){
			int flag = 1;
			for(int i=1;i<=n/2;i++)
			    if(a[i] != a[i + n/2]){
			    	flag = 0;
			    	break;
				}
			if(flag) puts("NO");
			else puts("YES");
		}
		else{
			if(a[1] == 0) puts("NO");
			else{
				int f1 = 0,f2 = 0;
				for(int i=1;i<=n/2;i++) c[i] = a[i];
				for(int i=n/2+1;i<=n;i++) b[i - n/2] = a[i];
				if(judge()) f1 = 1;
				if(!f1){
					puts("YES");
					continue;
				}
				for(int i=1;i<=n/2+1;i++) b[i] = a[i];
				for(int i=n/2+2;i<=n;i++) c[i - n/2 - 1] = a[i];
				if(judge()) f2 = 1; 
 				if(f1 && f2) puts("NO");
 				else puts("YES");
			}
		}
	}
	return 0;
}
2023/8/4 17:03
加载中...