S-Nim HDU 1536 博弈 sg函数
S-Nim HDU 1536 博弈 sg函数
题意
首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之后m行,每行输入一个n表示有n个堆,每堆有n1个石子,问这一行所表示的状态是赢还是输,如果赢输入W否则L。
解题思路
如果没有每次取石子个数的限制的话,那么仅仅需要把每堆石子的个数进行异或运算即可,如果结果不是1,那么先手赢,反之后手赢。
但是这里对每次取石子的个数进行了限制,每次只能从几个数中进行选择,这是就需要SG函数来进行处理了。至于为什么要使用SG函数来进行处理这里没有写,详细可以参考这个博客博弈论 SG函数
这里仅仅写了SG函数的两种写法:1是打表法,2是DFS法。
代码实现
//打表法实现
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e4+7;
int sg[maxn];
bool book[maxn];//这个需要用bool类型,如果改成int类型会超时,第一次遇到。
int s[107];
int k, m, l;
void getsg(int n, int k)//n代表这堆石子最多有多少,k代表有多少种取的模式
{
int i, j;
memset(sg, 0, sizeof(sg));
for(i=1; i<=n; i++)
{
memset(book, 0, sizeof(book));//每次有需要进行
for(j=1; j<=k && s[j]<=i; j++)
book[sg[i-s[j]]]=1;
for(j=0; ; j++)//查找里面第一个是0的
if(!book[j])
{
sg[i]=j;
break;
}
}
}
int main()
{
while(scanf("%d",&k) && k)
{
for(int i=1; i<=k; i++)
scanf("%d",&s[i]);
sort(s+1, s+1+k);
getsg(maxn-7, k);
scanf("%d",&m);
while(m--)
{
scanf("%d", &l);
int tmp, ans=0;
while(l--)
{
scanf("%d", &tmp);
ans^=sg[tmp];
}
if(ans==0)
printf("L");
else
printf("W");
}
printf("\n");
}
return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=10050+7;
int s[105];
int SG[maxn];
int k, m, l;
int sg(int x)
{
if(SG[x]!=-1) return SG[x];//记忆化搜索
bool book[105];
memset(book, 0, sizeof(book));
for(int i=1; i<=k && x-s[i]>=0; i++)
book[sg(x-s[i])]=1; //寻找他的下面的所有状态
for(int i=0; i<105; i++) //找到第一个是0的位置
if(book[i]==0) return SG[x]=i;
}
int main()
{
while(scanf("%d", &k) && k)
{
for(int i=1; i<=k; i++)
scanf("%d", &s[i]);
sort(s+1, s+1+k);
memset(SG, -1, sizeof(SG));
scanf("%d",&m);
while(m--)
{
scanf("%d", &l);
int tmp, ans=0;
for(int i=1;i<=l; i++)
{
scanf("%d", &tmp);
ans^=sg(tmp);
}
if(ans==0) printf("L");
else printf("W");
}
printf("\n");
}
return 0;
}
S-Nim HDU 1536 博弈 sg函数的更多相关文章
- HDU 1536 求解SG函数
#include<stdio.h> #include<string.h> #include<algorithm> #include<set> using ...
- hdu 5795 A Simple Nim 博弈sg函数
A Simple Nim Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pro ...
- HDU 5795 A Simple Nim 打表求SG函数的规律
A Simple Nim Problem Description Two players take turns picking candies from n heaps,the player wh ...
- HDU 1536 S-Nim SG博弈
S-Nim Problem Description Arthur and his sister Caroll have been playing a game called Nim for som ...
- hdu 3032(博弈sg函数)
题意:与原来基本的尼姆博弈不同的是,可以将一堆石子分成两堆石子也算一步操作,其它的都是一样的. 分析:由于石子的堆数和每一堆石子的数量都很大,所以肯定不能用搜索去求sg函数,现在我们只能通过找规律的办 ...
- HDU 1848 Fibonacci again and again (斐波那契博弈SG函数)
Fibonacci again and again Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & ...
- 尼姆博弈+SG函数
博弈这个东西真的很费脑诶.. 尼姆博奕(Nim Game):游戏者轮流从一堆棋子(或者任何道具)中取走一个或者多个,最后不能再取的就是输家.当指定相应数量时,一堆这样的棋子称作一个尼姆堆 当n堆棋子的 ...
- HDU-4678 Mine 博弈SG函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4678 题意就不说了,太长了... 这个应该算简单博弈吧.先求联通分量,把空白区域边上的数字个数全部求出 ...
- (转)博弈 SG函数
此文为以下博客做的摘要: https://blog.csdn.net/strangedbly/article/details/51137432 ---------------------------- ...
随机推荐
- Node.js的url模块简介
什么是URL URL是Uniform Location Resource的缩写,翻译为“统一资源定位符”,也就是描述资源位置的固定表示方法.被URL描述的资源可以位于互联网上,也可以位于本地. URL ...
- mysql LAST()函数 语法
mysql LAST()函数 语法 作用:返回指定的字段中最后一个记录的值. 语法:SELECT LAST(column_name) FROM table_name 注释:可使用 ORDER BY 语 ...
- option跳转页面并选中当前值
思路:使用cookie传值赋值 具体实现部分代码: <select onchange="test(this)" class="form-control" ...
- web上传文件夹
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- Java的格式化输出
在java中除了有System.out.println();和System.out.print();之外还有一种格式化的输出,用来限制宽度,保留小数点后的位数,还有对齐方式. 代码: package ...
- 网络对抗技术 20165220 Exp7 网络欺诈防范
网络对抗技术 20165220 Exp7 网络欺诈防范 实验任务 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof (1分) (3)结合应用两种技术,用DNS ...
- linux系统PS命令,按CPU、内存使用率对进程排序
https://blog.csdn.net/weixin_42123737/article/details/90081318
- 7、Shiro加密和加盐
这里我们以md5加密方法举例,首先我们写一个main方法测试我们的密码经过md5加密之后的得到什么样的字符串: /** * 书写方法测试Md5Hash将密码“houru”加密之后的密文 * 但是仅仅加 ...
- 3,、maven修改jar包下载为国内镜像下载地址
maven 默认的中央仓库是在国外的服务器,下载速度慢,有时候稍不注意就下载出错 通常我将maven的中央仓库修改为阿里云的地址,下载速度很快体验非常好 修改conf下的setting.xml文件 在 ...
- Python Module_openpyxl_styles 样式处理
目录 目录 前言 系统软件 Working with styles Styles can be applied to the following aspects Styles模块 Copying st ...