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 ---------------------------- ...
随机推荐
- python 面向对象_2
self的理解 通俗理解self就是实例对象,实例化的是什么,self就是什么 实例变量: 经过实例化才能使用的变量 class Person(): def __init__(self,id,name ...
- 11.关于django的content_type表
****** Django的contenttype表中存放发的是app名称和模型的对应关系 contentType使用方式 - 导入模块 from django.contrib.contenttype ...
- 1.关于python 的hmac加密
import base64 import hmac import urllib from hashlib import sha1 expires = b" # 过期时间戳 uuid = 'a ...
- [ZOJ3649]Social Net 题解
前言 这道题目珂以说是很毒瘤了. 题解 首先克鲁斯卡尔求最大生成树,输出边权和. 倍增维护四个值: 链上最大值/最小值 链向上/向下最大差值 当然祖先是肯定要维护的. 然后把一条链经LCA分成 ...
- 【BZOJ4565】 [Haoi2016]字符合并
Description 有一个长度为 n 的 01 串,你可以每次将相邻的 k 个字符合并,得到一个新的字符并获得一定分数.得到的新字 符和分数由这 k 个字符确定.你需要求出你能获得的最大分数. I ...
- python双划线类型
通过__开始的属性感觉分为两种类型: 利用dir调用的时候: < build in x object at 0x01F116B0>:这种貌似和运算符重载有关系,用户如果需要的话可以重写该函 ...
- 使用注解装配Bean
注解@Component代表Spring Ioc 会把 这个类扫描生产Bean 实例,而其中 value属性代表这个类在Spring 中的id,这就相当于XML方式定义的Bean 的 id 现在有了 ...
- 错误 NETSDK1007 找不到“E:\Project\MyProject\MyProject.Common\MyProject.Utility.csproj”的项目信息。这可以指示缺少一个项目引用。 MyProject.Data C:\Program Files\dotnet\sdk\2.2.107\Sdks\Microsoft.NET.Sdk\targets\Microsof
因为对MyProject.Data引用的项目MyProject.Common进行了重命名为MyProject.Utility,导致这个错误 解决办法: 1.找到MyProject.Data中的E:\P ...
- linux日常---2、lamp.sh安装lamp环境中的linux操作
linux日常---2.lamp.sh安装lamp环境中的linux操作 一.总结 一句话总结: 学不如用,学一百遍还不如真正多用几遍的来的效果好 1.linux下查看进程命令? ps 常用 ps - ...
- 连接Access数据库
web.config添加配置 <connectionStrings> <add name="connStr" connectionString="Pro ...