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;
}