博弈论 7.25杭电多校赛 D

4.

Game

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1770 Accepted Submission(s): 1089

 

Problem Description

Alice and Bob are playing a game.The game is played on a set of positive integers from 1 to n.In one step, the player can choose a positive integer from the set, and erase all of its divisors from the set. If a divisor doesn't exist it will be ignored.Alice and Bob choose in turn, the one who cannot choose (current set is empty) loses.Alice goes first, she wanna know whether she can win. Please judge by outputing 'Yes' or 'No'.

 

Input

There might be multiple test cases, no more than 10. You need to read till the end of input.For each test case, a line containing an integer n. (1≤n≤500)

 

Output

A line for each test case, 'Yes' or 'No'.

 

Sample Input

1

 

Sample Output

Yes

题目大意:

​ 两个人玩游戏,有1-n,轮流取,取一个数的同时,会消掉它的因子。alice先手,给你n,判断她能不能赢

想法:

​ 不懂不懂,初看感觉是智商题。听他们说这是博弈论题,先手肯定赢,感觉很神奇。签到题。

思路:

​ 1、“1”是所有数的因子,取任意哪个数都会把1去掉。

​ 2、那么不考虑1的存在,从2-n去取。从2-n先手取数有必胜,必输两种情况。

​ 3、如果从2-n先手取数必胜,那alice先从2-n里取(1也没了)就胜了。如果从2-n先手取数必输,那alice先取1,那么bob就成了先手取2-n的了,aclice胜。

标准题解:

​ 考虑将游戏变成初始时只有2~n,如果先手必胜的话,那么先手第一步按这样取就获胜了;如果后手必胜的话,那 么先手第一步取走1就获胜了。所以全输出Yes就行了。

AC代码:

#include <iostream>
using namespace std;
​
int main() {
    int n;
    while(cin>>n) {
        cout<<"Yes"<<endl;
    } 
    return 0;
}
​

参考:

https://www.ideone.com/Wo55gi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值