您的位置:首页 > 其它

HDU 4388 Stone Game II 博弈,规律题

2017-03-11 17:21 218 查看
题目链接:这里

题意:最初有n堆石子,每堆石子个数已知。两人轮流执行操作,如果当某人无法执行有效操作时即输。操作分两步: 第一步为:选择其中一堆石子假定石子个数为a,拿走个数不为0的一些石子使得该堆石子剩余k个并且保证(0 < k < a,k^a < a),^为异或符号。第二步为:加入一堆新的石子,石子个数为k^a,当然你也可以使用技能使得加入的石子个数变为(2k)^a。不过每个人每局游戏只能使用一次技能。无法执行有效操作即第一步或者第二步无法执行时。

解法:

如果所有石头数的二进制中1的总个数是奇数且n为偶数 胜

如果所有石头数的二进制中1的总个数是偶数且n为奇数 胜

其他情况 败

//HDU 4388

#include <bits/stdc++.h>
using namespace std;

int main(){
int T, n, ans, ks = 0;
scanf("%d", &T);
while(T--){
scanf("%d", &n);
ans = n;
for(int i = 1; i <= n; i++){
int x; scanf("%d", &x);
ans += __builtin_popcount(x);
}
if(ans&1) printf("Case %d: Yes\n", ++ks);
else printf("Case %d: No\n", ++ks);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: