转载自: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. mysql优化参数thread_cache_size

    thread_cache_size功能在mysql数据库配置文件中是非常重要的一项功能了,如果对thread_cache_size优化做得好我们可以让服务器跑得非常快,设置不好就会发现很小访问量就非常 ...

  2. CSS3教程:pointer-events属性值详解 阻止穿透点击

    转:http://www.poluoluo.com/jzxy/201109/142876.html 在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样 ...

  3. Java——各种日期的获取(来自别人分享)

     import java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; i ...

  4. java基础之:详解内部类(转载)

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

  5. JQuery之滑动幻灯片插件Easy Slider初体验

    Easy Slider 是一个滑动幻灯片插件,支持任何图片或内容,可以实现横向或纵向滑动.它拥有一系列丰富的参数设置,可通过CSS来进行完全的控制.基本上只需要引入这个插件后,设置好内容,然后样式化C ...

  6. NodeJS记录

    https://nqdeng.github.io/7-days-nodejs/#3.3.4

  7. compiler

    http://www.lingcc.com/2012/05/16/12048/ a list of compiler books — 汗牛充栋的编译器参考资料 Posted on 2012年5月16日 ...

  8. Nginx重写规则指南 转

    http://www.ttlsa.com/nginx/nginx-rewriting-rules-guide/ Nginx重写规则指南 当运维遇到要重写情况时,往往是要程序员把重写规则写好后,发给你, ...

  9. docker安装错误

    转载:http://www.roddypy.com/index.php/2016/03/11/centos7-yum-%E5%AE%89%E8%A3%85docker%E6%8A%A5%E9%94%9 ...

  10. shell算术运算与进制运算

    (())与let是等效的 arithmetic expression type 与[是等效的 source与.是等效的 其实,Shell(这里是Bash)本身不具备处理浮点计算的能力,但是可以使用“b ...