HDU 4388 Stone Game II 博弈,规律题

来源:互联网 发布:加州101电台知乎 编辑:程序博客网 时间:2024/06/03 20:01

题目链接:这里
题意:最初有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;}
0 0
原创粉丝点击