hdu1536(sg函数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1536
题意:首先输入K 表示一个集合的大小 之后输入集合 表示对于这对石子只能去这个集合中的元素的个数
之后输入 一个m 表示接下来对于这个集合要进行m次询问
之后m行 每行输入一个n 表示有n个堆 每堆有n1个石子 问这一行所表示的状态是赢还是输 如果赢输入W否则L
思路:sg函数
一开始直接打表tle了,因该是多组输入的原因吧
然后我们再仔细考虑一下这个m,m<=100,一般来说,给的数据不可能每组的max(a[i]) (1<=i<=m)都达到1e4;
所以我们可以不必每次打表都打到1e4,我们可以通过dfs针对具体数据打表;这样就不会tle啦;
代码:
#include <iostream>
#include <string.h>
#include <algorithm>
#define MAXN 200010
using namespace std; int f[MAXN], sg[MAXN], n; int dfs_sg(int x){//sg函数
if(sg[x]!=-){//之前已经计算过
return sg[x];
}
int vis[];
memset(vis, , sizeof(vis));
for(int i=; i<n; i++){//找到当前节点能到达的点
if(f[i]<=x){
dfs_sg(x-f[i]);
vis[sg[x-f[i]]]=;
}
}
for(int i=; ; i++){//求mex函数
if(!vis[i]){
sg[x]=i;
return sg[x];
}
}
} int main(void){
std::ios::sync_with_stdio(false), cin.tie(), cout.tie();
while(cin >> n){
if(n==){
break;
}
memset(sg, -, sizeof(sg));
for(int i=; i<n; i++){
cin >> f[i];
}
sort(f, f+n);
int k, t, x;
cin >> k;
while(k--){
cin >> t;
int ans=;
for(int i=; i<t; i++){
cin >> x;
ans^=dfs_sg(x);
}
if(ans==){
cout << "L";
}else{
cout << "W";
}
}
cout << endl;
}
return ;
}
hdu1536(sg函数)的更多相关文章
- hdu1536&&hdu3023 SG函数模板及其运用
S-Nim Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status ...
- hdu-1536 S-Nim SG函数
http://acm.hdu.edu.cn/showproblem.php?pid=1536 给出能够取的方法序列,然后求基本石子堆问题. 只要用S序列去做转移即可. 注意has初始化的一些技巧 #i ...
- HDU1536:S-Nim(sg函数)
S-Nim Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU1536&&POJ2960 S-Nim(SG函数博弈)
S-Nim Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u Submit Status ...
- SG函数 专题练习
[hdu1536][poj2960]S-Nim 题意 题意就是给出一个数组h,为每次可以取石子的数目. 然后给你n堆石子每堆si.求解先手能不能赢? 分析 根据\(h\)数组预处理出\(sg[i]\) ...
- hdu 1848(SG函数)
Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 关于SG函数
Sprague-Grundy定理(SG定理): 游戏和的SG函数等于各个游戏SG函数的Nim和.这样就可以将每一个子游戏分而治之,从而简化了问题.而Bouton定理就是Sprague-Grundy定理 ...
- HDU 5795 A Simple Nim 打表求SG函数的规律
A Simple Nim Problem Description Two players take turns picking candies from n heaps,the player wh ...
- 【转】博弈—SG函数
转自:http://chensmiles.blog.163.com/blog/static/12146399120104644141326/ http://blog.csdn.net/xiaofeng ...
随机推荐
- swift3.0系列完整demo代码库
https://github.com/soapyigu/Swift30Projects 感谢作者
- session自己定义存储,怎样更好地进行session共享;读tomcat7源代码,org.apache.catalina.session.FileStore可知
session自己定义存储.怎样更好地进行session共享: 读tomcat源代码,org.apache.catalina.session.FileStore可知 一.详见: 方法1 public ...
- python2&python3的区别
区别1. python3中>>>range<3,6>range<3,6> python2中>>>range<3,6>[3,4,5 ...
- Java 获取当前日期和时间
原文地址:http://www.blogjava.net/parable-myth/archive/2013/01/17/394364.html 有三种方法: 方法一:用java.util.Date类 ...
- const与define应用上该怎么取舍
const与define应用上该怎么取舍 #define WYB 100; const float WYB = 100; define是在预编译的时候展开替换的,const是编译运行阶段使用 defi ...
- Protocol_OSPF
Protocol_OSPF 作者:Danbo 2015-7-4 从一个非常概括的角度来看OSPF协议的操作是比较容易理解的 1.宣告OSPF的路由器从所有启动OSPF协议的接口上发出Hello数据包. ...
- oracle添加表注释和表字段注释
创建Oracle数据库表时加上注释 CREATE TABLE t1( id varchar2(32) primary key,name VARCHAR2(8) NOT NULL, age numbe ...
- MySQL索引优化-from 高性能MYSQL
Btree: 1. 尽量使用覆盖索引, 即三星索引 2. 多列索引如果带范围的话, 后续列不会作为筛选条件 3. 多列索引应选择过滤性更好的充当前缀索引 4. 尽量按主键顺序插入, 减少页分裂, 采用 ...
- Linux删除乱码非空目录
# ls -li 总用量 drwxr-xr-x root root 2月 : 2.1 -rw-rw-r-- binwen binwen 2月 : Htc_常用软件.zip drwxr-xr-x roo ...
- Understand JavaScript’s “this” With Clarity, and Master It
The this keyword in JavaScript confuses new and seasoned JavaScript developers alike. This article a ...