hdu 3032 SG(打表找规律) 石子可以 任意取 或分割成非空的两堆
来源:互联网 发布:7u分享网络注册 编辑:程序博客网 时间:2024/06/05 18:00
题目来源:
http://acm.hdu.edu.cn/showproblem.php?pid=3032
分析:
Lasker's Nim游戏: sg(4k)=4k-1;sg(4k+1)=4k+1;sg(4k+2)=4k+2;sg(4k+3)=4k+4;
打表 代码:
int Get_SG(int x) { int visited[101]={0}; if(sg[x] != -1) return sg[x]; // 同一个集合, 如果已经计算过的sg[x], 可以重复利用 for(int i= x - 1 ; i>= 0 ; i--) visited[Get_SG(i)] = 1 ; // 取石子 for(int j=1; j <= x /2; j++){ // 把一堆石子分两堆 int ans = 0 ; ans ^= Get_SG(j) ; ans ^= Get_SG(x - j) ; visited[ans] = 1 ; } for(int i=0;;i++) if(!visited[i]) return sg[x]=i;}
找出规律》
本题代码如下:
int g(int x){ if(x == 0) return 0 ; if(x % 4 == 0) return x -1 ; if( (x % 4 == 1) ||( x % 4 == 2)) return x; if(x % 4 == 3) return x + 1 ;}int main(){ int t, n; scanf("%d", &t) ; while(t--){ scanf("%d", &n) ; int x , res = 0; for(int i=0 ; i< n ;i++){ scanf("%d" , &x) ; res ^= g(x) ; } if(res ) puts("Alice") ; else puts("Bob") ; } return 0 ;}
0 0
- hdu 3032 SG(打表找规律) 石子可以 任意取 或分割成非空的两堆
- N堆石子,两人每次任取任意一堆任意个
- NYOJ 135 取石子(二) (sg规律)
- 石子合并 任意两堆合并
- hdu 5088 高斯消元n堆石子取k堆石子使剩余异或值为0
- hdu 2177 威佐夫博弈+输出使你胜的你第1次取石子后剩下的两堆石子的数量
- hdu3032 Nim or not Nim?-----sg打表找规律 允许把一堆石子分成两堆小的
- hdu 2176 取(m堆)石子游戏
- hdu 2177 取(2堆)石子游戏
- hdu 2176 取(m堆)石子游戏
- hdu 2177 取(2堆)石子游戏
- HDU 2176 取(m堆)石子游戏
- HDU 2177 取(2堆)石子游戏
- hdu 2177 取(2堆)石子游戏
- hdu 2176 取(m堆)石子游戏
- HDU 2177 取(2堆)石子游戏
- HDU 2176 取(m堆)石子游戏
- hdu 2176 取(m堆)石子游戏
- zoj 1806 This Takes the Cake 计算凸四边形和三角形的面积
- zoj 1904 Beavergnaw 计算圆柱和圆台的体积
- 大数相加
- hdu 2516 FIB博弈模型
- hdu 2897 巴什博弈变形
- hdu 3032 SG(打表找规律) 石子可以 任意取 或分割成非空的两堆
- zoj 3386 Trick or Treat 三分 求最大值的 最小值
- bzoj 1038 瞭望塔 半平面交 + 最小值 枚举
- OpenGL入门学习之八——使用显示列表
- zoj 3233 容斥原理 + 双条件
- kmp变形 如何判断第i个字符是否匹配函数 hdu 4749
- bzoj 2732 [HNOI2012]射箭 半平面交(刘汝佳版不超时) + 整型二分处理
- ioctl()函数详解分类
- 2014北京邀请赛 F Football on Table