博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[恢]hdu 1536
阅读量:5072 次
发布时间:2019-06-12

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

2011-12-24 18:56:53

地址:

题意:有一个集合有S个数。玩N次取石子游戏,每次只能取S集合里的数个石子。求判先手胜负。

mark:SG函数,NIM博弈标准题。先求SG值打表,之后一串异或就OK了。复杂度是100w。

代码:

# 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/lzsz1212/archive/2012/01/06/2315337.html

你可能感兴趣的文章
C#嵌入C++
查看>>
java反射教程
查看>>
如何阅读科研论文笔记
查看>>
我的游戏学习日志33——游戏结构(2)
查看>>
二维数组中的查找
查看>>
htnl5与html4的区别
查看>>
webpack安装及使用
查看>>
linux下IPTABLES配置详解
查看>>
【mysql升级步骤】windows mysql版本升级 ,mysql 5.6 升级到5.7.27
查看>>
Linux内核优化
查看>>
为什么应用程序用户启动时崩溃,使用xcode打开却不会
查看>>
session
查看>>
多线程面试题Top53
查看>>
多线程编程
查看>>
django中模型详解-字段类型与约束条件
查看>>
js学习总结----预解释、作用域、this原理及应用
查看>>
js面试题-----算法类
查看>>
2)添加光标和图标
查看>>
人工智能会伤害人类吗?怎样控制他们?
查看>>
【趟坑】公共引用的jar包 pom的配置方法
查看>>