Portal -->poj2068

Description

​   给你\(S\)个石子,有\(2n\)个人分成两队,编号为奇数的一队,编号为偶数的一队,\(2n\)个人按照编号从小到大的顺序拿石子,所有人都拿过了就再从\(1\)号轮,编号为\(i\)的人一次可以拿\(x\in[1,a[i]]\)颗,拿到最后一颗石子的队伍输,判断当前局面是否先手必胜

Solution

​   emmm今天做了几道sg函数的题然后感觉这玩意很神秘

​​   除了转化成"有向图游戏"那样的形式之后用异或和和\(mex\)求\(sg\)以外,还有的题中\(sg\)的取值只有\(0\)和\(1\)两种,可以直接判断是否存在一个后继局面的\(sg\)值为\(0\)(也就是先手必败态),如果有就说明当前局面\(sg\)值为\(1\)(也就是先手必胜态),因为根据P-position(先败)和N-position(先胜)的定义,可以移动到P-position的局面是N-position,所以直接这么判就好了

​​   当然你也还是可以转成 一个有向图游戏,只要后继局面中有\(0\),那么取一下\(mex\)就只能是\(1\)了,一样的

​​   这题中比较容易想到的就是用"当前是谁准备取"和"当前还剩多少石子"来表示一个局面,那直接大力记忆化搜索就好了,边界条件就是如果当前没有石子了,那么是先手必胜态

​​   最后就是求\(nxt\)的时候模数记得是\(2n\)而不是\(n\)。。。

​   (一开始陷入了一个误区。。就是觉得每个人的取石子上限不同,所以不是一个ICG,但其实ICG中只是要求移动集合(在这题里也就是能移哪些石子)不与选手相关,并没有限制具体操作)

​  

​   代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=9000;
int f[60][N],a[60];
int vis[N];
int n,m,S,mark;
int nxt(int x){return (x+1)%(2*n)==0?2*n:(x+1)%(2*n);}
int sg(int x,int stone){
if (f[x][stone]!=-1) return f[x][stone];
if (stone==0) return f[x][stone]=1;
int tmp=nxt(x);
for (int i=1;i<=a[x]&&i<=stone;++i){
if (!sg(tmp,stone-i))
return f[x][stone]=1;
}
return f[x][stone]=0;
} int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
while (1){
scanf("%d",&n);
if (n==0) break;
memset(f,-1,sizeof(f));
scanf("%d",&S);
mark=0;
for (int i=1;i<=n*2;++i)scanf("%d",a+i);
printf("%d\n",sg(1,S));
}
}

【poj2068】Nim的更多相关文章

  1. 【HDU3032】Nim or not Nim?(博弈论)

    [HDU3032]Nim or not Nim?(博弈论) 题面 HDU 题解 \(Multi-SG\)模板题 #include<iostream> #include<cstdio& ...

  2. 【BZOJ2819】Nim 树状数组+LCA

    [BZOJ2819]Nim Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可 ...

  3. 洛谷 P2197 【模板】nim游戏 解题报告

    P2197 [模板]nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以 ...

  4. 【bzoj2819】Nim

    Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游 ...

  5. 【bzoj2819】Nim DFS序+树状数组+倍增LCA

    题目描述 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...

  6. 【bzoj2819】 Nim

    www.lydsy.com/JudgeOnline/problem.php?id=2819 (题目链接) 题意 动态树上路径异或和. Solution Nim取石子游戏的sg值就是每堆石子的异或和,所 ...

  7. 【POJ】【2068】Nim

    博弈论/DP 这是Nim?这不是巴什博奕的变形吗…… 我也不会捉啊,不过一看最多只有20个人,每人最多拿16个石子,总共只有8196-1个石子,范围好像挺小的,嗯目测暴力可做. so,记忆化搜索直接水 ...

  8. 【POJ】【2975】Nim

    博弈论 我哭……思路错误WA了6次?(好像还有手抖点错……) 本题是要求Nim游戏的第一步必胜策略有几种. 一开始我想:先全部异或起来得到ans,从每个比ans大的堆里取走ans个即可,答案如此累计… ...

  9. 【BZOJ】【2819】NIM

    这题……咋说捏,其实是一道披着博弈论外衣的树上操作问题…… 随便用dfs序或者树链剖分转成序列,然后查询路径上的所有点的NIM和(异或和)就行了,毕竟除了是在树上以外,就是裸的NIM问题. 树链剖分: ...

随机推荐

  1. AtCoder Grand Contest 026 D - Histogram Coloring

    一列中有两个连续的元素,那么下一列只能选择选择正好相反的填色方案(因为连续的地方填色方案已经确定,其他地方也就确定了) 我们现将高度进行离散化到Has数组中,然后定义dp数组 dp[i][j] 表示前 ...

  2. 设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换

    目录 任务描述 解决方案 Magick++ Talk is cheap, show me the code. 与 Opencv 配合 相关链接 任务描述 我有这样一个需求,读取一张格式为PNG 或者 ...

  3. Elasticsearch.Net 异常:[match] query doesn't support multiple fields, found [field] and [query]

    用Elasticsearch.Net检索数据,报异常: )); ElasticLowLevelClient client = new ElasticLowLevelClient(settings); ...

  4. String中intern()方法

    intren方法:通俗的讲,是将字符串放入常量池中. new出来的字符串是放在堆中,直接赋值的字符串是放在常量池中的. 对字符串做拼接操作,即做“+”运算,分两种情况 (1)表达式右边是纯字符串常量, ...

  5. 如何选择合适的Qt5版本?

    注意:这里讨论的是在不编译Qt源码的情况下,推荐下载的官方编译版本. 支持XP SP3以及之后的Windows版本:推荐 Qt5.6 或 Qt5.9,这两个版本是LTS版本(即长期支持版本),Bug较 ...

  6. How to pass an Amazon account review

    Have you ever sold products on Amazon? How about sold so much within the first week that amazon deci ...

  7. 面对30页左右的运放数据手册datasheet,你需要知道如何看懂

    1.输入失调电压(Input Offset Voltage) VOS    若将运放的两个输入端接地,理想运放输出为零,但实际运放输出不为零.此时,用输出电压除以增益得到的等效输入电压称为输入失调电压 ...

  8. 作业要求20181113-4 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 02

    作业要求:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2384 版本控制:[https://git.coding.net/lglr201 ...

  9. 用VS测试程序

    怀着一种忐忑的心情,我开始了我的软件测试. #include "stdio.h" #include "stdlib.h" int main(int argc, ...

  10. (一)Tensorflow安装

    主要包括下面两个指令: $ sudo apt-get install python-pip python-dev $ sudo pip install --upgrade https://storag ...