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为奇数 胜
其他情况 败
题意:最初有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; }
相关文章推荐
- HDU 4388 Stone Game II {博弈||找规律}
- HDU 4388 Stone Game II(博弈)
- HDU 4388 Stone Game II [博弈]
- hdu 4388 Stone Game II
- hdu 1729 Stone Game 【博弈-找规律】
- 博弈_______Stone Game II(hdu 4388 2012多校第九场)
- HDU4388 Stone Game II (找规律博弈)
- HDU 1564 Play a game(规律博弈)
- HDU 1564-Play a game(博弈-找规律)
- HDU 3389 Game(博弈 Nim 找规律)
- hdu 1564 Play a game(博弈找规律)
- HDU 4387 Stone Game 博弈
- hdu 1564 Play a game(博弈——找规律)
- hdu1564 Play a game【博弈 找规律】
- HDU 1729 Stone Game(博弈 + SG函数)
- 博弈_______Stone Game(hdu 4387)
- POJ 1740 A New Stone Game(多堆博弈找规律)
- HDU 1564 Play a game(博弈找规律)
- HDU 1564 Play a game (博弈、找规律)
- POJ 1740 A New Stone Game 博弈,规律