#include<bits/stdc++.h>
using namespace std;
int a[1000010];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
int n,d;
bool flag=true;
scanf("%d%d",&n,&d);
int cnt=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>=2)
cnt++;
}
int k=n%3;
if(k==0)
{
if(cnt==0&&d==1)
flag=false;
if(cnt==1&&d==2)
flag=false;
}
else if(k==1)
{
if(cnt<=1&&d==2)
flag=false;
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
博弈:
1、当 n为 3的 倍数时,若每个石子堆都是1,A先手必输。只有一个数量大于1的石子堆,则B先手A必输
2. 当 n为3的倍数加一时。若数量大于1的石子堆数量小于等于一。则B先手A必输。