转载自:http://blog.csdn.net/sr_19930829/article/details/23446173

解题思路:

这个题折腾了两三天,参考了两个模板,在这之间折腾过来折腾过去,终于把用法和需要注意的地方弄清楚了,汗。注意的是: bool类型的数组比int类型的数组快,不超时与超时的区别,在sg组合博弈时,只能在(a1,a2,a3,a4)中取,要特别注意这里面的数字是否是有序的,这个特别重要,下面贴出的两个模板对应了两种情况。最后,大数据输入还得用scanf。。

模板1(该模板注意的是一定要把 f 数组中的数字从小到大排序):

const int N=;//N为所有堆最多石子的数量
int f[],sg[N];//f[]用来保存只能拿多少个,sg[]来保存SG值
bool hash[N];//mex{}
void sg_solve(int t,int N)//t指f[]中的个数
{
int i,j;
memset(sg,,sizeof(sg));
for(i=;i<=N;i++)
{
memset(hash,,sizeof(hash));
for(j=;j<=t&&f[j]<=i;j++)
{
hash[sg[i-f[j]]]=;
}
for(j=;j<=N;j++)
if(!hash[j])
break;
sg[i] = j;
}
}

模板2(该模板不需要进行排序)

const int N=;//N为所有堆最多石子的数量
int f[],sg[N];//f[]用来保存只能拿多少个,sg[]来保存SG值
bool hash[N];//mex{}
void sg_solve(int t,int N)
{
int i,j;
memset(sg,,sizeof(sg));
for(i=;i<=N;i++)
{
memset(hash,,sizeof(hash));
for(j=;j<=t;j++)
if(i - f[j] >= )
hash[sg[i-f[j]]] = ;
for(j=;j<=N;j++)
if(!hash[j])
break;
sg[i] = j;
}
}

代码(使用第二个模板)

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
using namespace std; const int N=;//N为所有堆最多石子的数量
int f[],sg[N];//f[]用来保存只能拿多少个,sg[]来保存SG值
bool hash[N];//mex{}
void sg_solve(int t,int N)
{
int i,j;
memset(sg,,sizeof(sg));
for(i=;i<=N;i++)
{
memset(hash,,sizeof(hash));
for(j=;j<=t;j++)
if(i - f[j] >= )
hash[sg[i-f[j]]] = ;
for(j=;j<=N;j++)
if(!hash[j])
break;
sg[i] = j;
}
} int main()
{
int k,m,l,num,i,j;
while(scanf("%d",&k),k)
{
for(i=;i<=k;i++)
scanf("%d",&f[i]);
sg_solve(k,N);
scanf("%d",&m);
string ans="";
for( i=;i<=m;i++)
{
int sum=;
scanf("%d",&l);
for( j=;j<=l;j++)
{
scanf("%d",&num);
sum^=sg[num];
}
if(sum==)
ans+="L";
else
ans+="W";
}
cout<<ans<<endl;
}
return ;
}

hdu 1536 S-Nim(sg函数模板)的更多相关文章

  1. hdu 1536&&1944 S-Nim sg函数 难度:0

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. hdu 1536 SG函数模板题

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. hdu 3032 Nim or not Nim? sg函数 难度:0

    Nim or not Nim? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)

    Nim or not Nim? Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  5. HDU 1847-Good Luck in CET-4 Everybody!-博弈SG函数模板

    Problem Description 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Cici都是如此.当然,作为在考场浸润了十几载 ...

  6. hdu1536&&hdu3023 SG函数模板及其运用

    S-Nim Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status ...

  7. SG函数模板(转)

    ps:sg[i]为0表示i节点先手必败. 首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数.例如mex{0,1,2,4}=3.me ...

  8. HDU 5724 Chess(SG函数+状态压缩)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5724 题意: 现在有一个n*20的棋盘,上面有一些棋子,双方每次可以选择一个棋子把它移动到其右边第一 ...

  9. HDU 5724 Chess(SG函数)

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

随机推荐

  1. 20145220 实验五 Java网络编程

    20145220 实验五 Java网络编程 实验内容 1.用书上的TCP代码,实现服务器与客户端. 2.客户端与服务器连接 3.客户端中输入明文,利用DES算法加密,DES的秘钥用RSA公钥密码中服务 ...

  2. timus 1109 Conference(二分图匹配)

    Conference Time limit: 0.5 secondMemory limit: 64 MB On the upcoming conference were sent M represen ...

  3. poj1511 最短路

    题意:与poj3268一样,所有人需要从各点到一点再从一点到各点,求最短路总和. 与poj3268一样,先正向建图跑 dijkstra ,得到该点到其他所有各点的最短路,即这些人回去的最短路,再用反向 ...

  4. 英语语法最终珍藏版笔记-6“情态动词+have+ done”的含义

    “情态动词+have+ done”的含义 1.Must have done的含义.“must have+过去分词”表示对过去的推测,意思是“一定已经,想必已经,准是已经….”,只用于肯定句中.例如: ...

  5. js调用百度地图API创建地图

    技术交流群:233513714 <html xmlns="http://www.w3.org/1999/xhtml"><head runat="serv ...

  6. 另一个分区工具GNU的parted[转自vbird]

    利用 GNU 的 parted 进行分割行为 虽然你可以使用 fdisk 很快速的将你的分割槽切割妥当,不过 fdisk 却无法支持到高于 2TB 以上的分割槽! 此时就得需要 parted 来处理了 ...

  7. win7下安装配置tomcat,java运行环境

    转 http://www.cnblogs.com/pannysp/archive/2012/03/07/2383364.html 1.下载JDK,安装 官网下载地址:http://java.sun.c ...

  8. [unity3d程序] 颜色渐变效果

    研究了下,颜色变化时遵从RGB圆环(就是说颜色条对接一下成环)路径最小变化原则.举个例子,加入ABCDE四个颜色点,并且A和E在同一点(转了一圈)设定从A变化到C的话,有两种路径,一种ABC,还一种A ...

  9. JQuery判断checkbox选中,jquery获取选中的checkbox

    选中的radio $('input[name="radInvoiceType"]:checked').val(); 这样能获得 $('input[name="radInv ...

  10. js移动焦点到最后

      当输入框(input/textarea)获得焦点时,将焦点移动到最后,在某些情况下用户体验很好.网上的大部分方法都是针对IE浏览器的.代码如下: var el = document.getElem ...