题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6312
题意:
Alice和Bob正在玩一个游戏。游戏是在一组正整数上进行的,从1到n。在一个步骤中,玩家可以从集合中选择正整数,并从集合中删除所有的除数。如果一个除数不存在,它将被忽略。
Alice和Bob依次选择,直到有人不能选择的(即当前数组为空)时候,这个人就输了。
Alice先取,她想知道她是否能赢。请用“Yes”或“No”来判断。
输入:
有多组测试用例,输入直到文件结束。每组测试用例只有一行,输入n。
输出:
对每个测试用例,输出“Yes”或“No”
分析:
很简单的签到题,是一个博弈题目。
一开始的时候,我是测试n从1到7七种情况,都发现Alice一定是赢的,所以就大胆猜测,全部都是“Yes”。
有理论的推测就是:
因为1是相当于没有的,因为1是所有数的除数,要么你先拿1,要么你无论拿1除外的数都会把1也拿走。
所以如果Alice是先手优势,我就取。
如果是后手优势,我就取1,变成让你先取。
这就是因为1可有可无,所以我可以选择一开始选不选1,来选择对我优势大的。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
puts("Yes");
}
}