时间限制: 1 Sec 内存限制: 128 MB
提交: 12 解决: 5
[提交][状态][讨论版]
题目描述
Kerwin 和 Lester是一对好Basefriend,在“六一光棍节”这天,他们漫步校园,来到了一个石子堆前。
Kerwin决定戏耍一下Lester,以便让他为自己的晚饭买单,以解救自己羞涩的钱包。Kerwin来到石子堆前,抓了一把石子,分成了几堆,说道:“Lester,咱们来玩个游戏吧。”“什么游戏?”“你看,这里有几堆石子,我们轮流从其中一堆拿走一个或者两个石子,由我先取,如果谁取走了最后一颗石子谁输。嗯,输一局请对方一顿饭。”Lester听完规则,微微一下“好啊!”Kerwin虽然对于Lester的微笑心下有些底气不足,但是也没法多想。
果不其然,几局过后,Kerwin输得一塌糊涂,已经欠下了一个月的晚饭了。Kerwin心下很是气恼。Lester一看Kerwin的恼怒样,决定再刺激他一下“最后一局来把大的吧,你赢了,咱俩扯平,反之,你多输半个月的。怎么样,划算吧?”
一直在关注着他们俩的你,在一旁也看不下去了。在Kerwin做出决定前,你发现了Lester获胜的原因。你告诉了Kerwin最佳策略。
Kerwin并不愚蠢,知晓最佳策略后,他立即知道了最佳策略下,游戏的结果。
那么他是否应该答应Lester的挑战呢?
输入
一个正整数T(1 ≤ T ≤ 100),表示有T组数据。
以下每组数据各有两行输入
第一行包含两个正整数N(1 ≤ N ≤ 100000),表示有N堆石子。
第二行包含N个正整数Ai(1 ≤ i ≤ N, 1 ≤ Ai ≤ 100000)表示第i堆石子有Ai个石子。
输出
每组数据输出一行,包含一个字符串,当Kerwin有必胜策略时,输出“Yes”,当Kerwin必败时,输出“No”。(在Lester采取最佳策略的情况下)
样例输入
2
1
1
2
1 2
样例输出
No
Yes
提示
来源
wxDIY
分析:两个人轮流从任意一堆拿走一个或者两个,像这种就会考虑,有多少队最后会剩下1个或者2个
在这题中,分析可知,只有当不是3的倍数的若干堆中,
情况1:所有的都是1且是偶数个堆
情况2:有 奇数堆个 中有2个石子**
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,num1=0,num2=0,a;
scanf("%d",&n);
while(n--)
{
scanf("%d",&a);
if(a%3==1) num1++;
if(a%3==2) num2++;
}
if((num1%2==0&&num2==0)||num2%2==1)
puts("Yes");
else
puts("No");
}
return 0;
}