可以看出当 f(a)=2 时输出 Yes,否则输出 No。
然后我推算了一下,最后搞出了一个思路:
于是我就按照上面口胡的做法写了一个代码,然后成功 WA。
所以希望大家看一看我的思路有什么问题(或者直接分享一下正解),或者代码哪里写挂了(雾)
代码:
#include<iostream>
#include<algorithm>
using namespace std;
inline int read(){
int ret=0;
char ch=' ',c=getchar();
while(!('0'<=c&&c<='9')) ch=c,c=getchar();
while('0'<=c&&c<='9') ret=(ret<<1)+(ret<<3)+(c^48),c=getchar();
return ch=='-'?-ret:ret;
}
int T,n;
const int N=3e6+10;
int a[N];
//int b[3]={0,2,1},c[3]={1,2,0};
int main(){
T=read();
while(T--){
n=read();
for(int i=1;i<=n;i++) a[i]=min(read(),2);
if(n&1){
int mid=(n+1)>>1;
if(a[mid]==2&&((a[mid-1]==0)^(a[mid+1]==0))) puts("Yes");
else puts("No");
}
else{
int mid=n>>1;
if((a[mid]^a[mid]+1)==1){
if(n==2) puts("Yes");
else if(a[mid]) puts((!a[mid-1])?"Yes":"No");
else if(a[mid+1]) puts((!a[mid+2])?"Yes":"No");
}
else puts("No");
}
}
return 0;
}