博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1536 博弈 sg N堆石子 取数集合S 判断先手是否会赢
阅读量:5150 次
发布时间:2019-06-13

本文共 1027 字,大约阅读时间需要 3 分钟。

本题用了打表的形式,求出了1000内的sg值,非常直接

参考代码()

# include 
# include
int sg[10010] ;int k, knum[110] ;int flag[110] ;int met(int n){ int i, ans = 0 ; memset (flag, 0, sizeof(flag)) ; for (i = 0 ; i < k ; i++) if (n - knum[i] >= 0) flag[sg[n - knum[i]]] = 1 ; for (i = 0 ; i <= 101 ; i++) if (flag[i] == 0) return i ;}void Sprague_Grundy(){ int i ; for (i = 1 ; i <= 10000 ; i++) sg[i] = met(i) ;}int main (){ int i, n, l, num, ans ; while (~scanf ("%d", &k) && k) { for (i = 0 ; i < k ; i++) scanf ("%d", &knum[i]) ; Sprague_Grundy() ; scanf ("%d", &n) ; while (n--) { ans = 0 ; scanf ("%d", &l) ; while (l--) { scanf ("%d", &num) ; ans ^= sg[num] ; } printf (ans == 0 ? "L" : "W") ; } printf ("\n") ; } return 0 ;}

  

转载于:https://www.cnblogs.com/jackes/archive/2012/04/03/2430818.html

你可能感兴趣的文章
Lambda表达式
查看>>
srm537 div1-3 最小费用最大流
查看>>
软件项目中的功能点法估算-原理
查看>>
php分享十七:http状态码
查看>>
VC++ 动态DLL模板-DllMain函数
查看>>
K3Cloud 设置分录的字段颜色
查看>>
C语言初学 俩数相除问题
查看>>
Shell文本处理 - 分割合并与过滤
查看>>
Java 按页拆分pdf
查看>>
我要翻译《Think Python》 - 开篇申明
查看>>
MS SQL Server2012中的CONCAT函数
查看>>
不一样的编辑器
查看>>
博客园安家--写给自己
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
python 列表中的数字转为字符串
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>