求hack
查看原帖
求hack
593299
Qerucy楼主2024/4/24 17:30

rt,每个子任务最后一个点过不去。

思路就是判断中间数是否为2然后中间数两边有没有一个0

代码:

#include<bits/stdc++.h>

using namespace std;

int t,n;
int a[3000010];

int mex(int a,int b){
	if(a>b) swap(a,b);
	if(a==0){
		if(b==1) return 2;
		else return 1;
	}
	else return 0;
}

int main(){
	scanf("%d",&t);
	while(t--){
		bool fg=0;
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			scanf("%d",&a[i]);
			if(a[i]>2) a[i]=2;
		}
		if(n%2){
			if(a[n/2+1]==2){
				if((a[n/2]==0&&a[n/2+2]!=0)||(a[n/2+2]==0&&a[n/2]!=0)){
					fg=1;
				}
			}
		}
		else{
			for(int i=1;i<=n;i++){
				a[i]=mex(a[i],a[i+1]);
			}
			n--;
			if(a[n/2+1]==2){
				if((a[n/2]==0&&a[n/2+2]!=0)||(a[n/2+2]==0&&a[n/2]!=0)){
					fg=1;
				}
			}
		}
		puts(fg?"Yes":"No");
	}
	return 0;
}
2024/4/24 17:30
加载中...