链接:https://ac.nowcoder.com/acm/contest/3006/E
来源:牛客网
题目描述:
牛牛战队的三个队员在训练之余会自己口胡了一些题当做平时的益智游戏。有一天牛可乐想出了一个小游戏给另外两名队员玩,游戏规则如下:
- 初始一共有n张卡牌
- 先手第一步最少要拿1张牌,最多要拿n−1张牌。
- 接下来每一步,双方最少要拿1张牌,最多拿等同于上一步对方拿的牌数的牌。
- 拿走最后一张牌的人将取得游戏的胜利。
你作为旁观者,看着他们玩的很开心,想参与到这场游戏中来,赌一赌谁会能赢。
输入描述:
输入数据包含一个整数n(2≤n≤1018),表示初始卡牌张数。
输出描述:
如果先手有必胜策略,输出Bob,否则输出Alice。
输入样例:
2
输出样例:
Alice
核心思想:
从2开始暴力求解每一个数字是必胜态还是必败态。求到16就可以发现:
2,4,8,16是必败态,其余都是必胜态。
若n=2k,则先手必胜。
代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
ll n,cnt=0;
cin>>n;
while(n)
{
cnt+=n&1;
n>>=1;
}
if(cnt>1) printf("Bob\n");
else printf("Alice\n");
return 0;
}