2016 Multi-University Training Contest 6 1003 A Simple Nim (博弈sg函数)
2016-09-08 21:39
447 查看
题意
有几堆糖果,两个人轮流取,可在某一堆中取任意个,或者选择一堆分成三堆,取走最后一个糖果的人输了。思路
对于某一堆来说所有状况的后继的糖果数量都小于当前的糖果数量(如果分堆则是三个小的SG的异或值),所以可以地推打一个小范围的SG表,发现当i%8 == 7 时sg[i] = i+1,同时,sg[i+1] = i;直接根据这个结论就可以算出所有糖果数量的SG值,直接异或即可。
代码
#include <bits/stdc++.h> using namespace std; int main (){ int T; scanf("%d", &T); while(T --){ int n; scanf("%d",&n); int ans = 0; while(n --){ int tmp; scanf("%d", &tmp); if(tmp%8 == 7) tmp ++; else if(tmp%8 == 0) tmp --; ans ^= tmp; } if(ans == 0) puts("Second player wins."); else puts("First player wins."); } return 0; }
相关文章推荐
- (HDU 5795)2016 Multi-University Training Contest 6 A Simple Nim (SG函数、博弈)
- hdu 5795 A Simple Nim(2016 Multi-University Training Contest 6——博弈)
- HDU 5795 A Simple Nim(SG打表找规律)——2016 Multi-University Training Contest 6
- (HDU 5724)2016 Multi-University Training Contest 1 Chess(SG函数、博弈)
- 2016 Multi-University Training Contest 3 1003 Life Winner Bo (博弈)
- 【HDU5724 2016 Multi-University Training Contest 1B】【博弈 SG函数】Chess 棋子跳棋向右移 先后手胜负博弈
- HDU 5274 Chess(SG博弈)---2016 Multi-University Training Contest 1
- HDU 5754 Life Winner Bo(找规律 + 威佐夫博弈)--2016 Multi-University Training Contest 3
- 2016 多校 Multi-University Training Contest 6 A Simple Chess
- 2016 Multi-University Training Contest 5 1003 Divide the Sequence
- 2016 Multi-University Training Contest 5 1003 Divide the Sequence (贪心)
- HDU5724 Chess 阶梯博弈变形 2016 Multi-University Training Contest 1
- hdu 4973 A simple simulation problem 线段树 2014 Multi-University Training Contest 10-1003
- 【2016 Multi-University Training Contest 6】【1002】【A Simple Chess】
- hdu 5299 Circles Game 2015 Multi-University Training Contest 1 计算几何+博弈SG函数 圆的扫描线
- (HDU 5794)2016 Multi-University Training Contest 6 A Simple Chess (Lucas、容斥)
- 2016 Multi-University Training Contest 1 1002 Chess (博弈+状态压缩)
- 2016 Multi-University Training Contest 1 1002 Chess (博弈+状态压缩)
- HDU 5274 Chess(SG博弈)---2016 Multi-University Training Contest 1
- 2016 Multi-University Training Contest 1 1002 hdu 5724 博弈