# 题面：

Hakase and Nano are playing an ancient pebble game (pebble is a kind of rock). There are n packs
of pebbles, and the i-th pack contains ai pebbles. They take turns to pick up pebbles. In each turn,
they can choose a pack arbitrarily and pick up at least one pebble in this pack. The person who
takes the last pebble wins.
This time, Hakase cheats. In each turn, she must pick pebbles following the rules twice continuously.
Suppose both players play optimally, can you tell whether Hakase will win?
Input
The first line contains an integer $T (1 <= T <= 20)$ representing the number of test cases.
For each test case, the first line of description contains two integers $n(1 <= n <= 106) and d (d = 1 or d = 2)$. If d = 1, Hakase takes first and if d = 2, Nano takes first. n represents the number of pebble
packs.
The second line contains n integers, the i-th integer ai (1  ai  109) represents the number of
pebbles in the i-th pebble pack.
Output
For each test case, print “Yes” or “No” in one line. If Hakase can win, print “Yes”, otherwise, print“No”.

Example

standard input standard output
2
3 1
1 1 2 Yes
3 2
1 1 2 No

# 大致思路：

1.当 $n$ 为 3的 倍数时，若每个石子堆都是1，A先手必输。只有一个数量大于1的石子堆，则B先手A必输

2.当 $n$ 为3的倍数加一时。若数量大于1的石子堆数量小于等于一。则B先手A必输。

# 代码：

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
int main()
{
ios::sync_with_stdio(false);
bool flag=true;
int t,n,d,a;
cin>>t;
while(t--)
{
flag=true;
int cnt=0;
cin>>n>>d;
for(int i=0;i<n;++i){
cin>>a;
if(a>=2)
cnt++;
}
int x=n%3;
if(x==0){
if(cnt==0 && d==1)
flag=false;
if(cnt==1 && d==2)
flag=false;
}else if(x==1){
if(cnt<=1 && d==2)
flag=false;
}
if(flag)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}

posted @ 2018-05-25 16:53 SCaryon 阅读(...) 评论(...) 编辑 收藏