
博弈
文章平均质量分 74
我不会额
这个作者很懒,什么都没留下…
展开
-
HDU - 3032 Nim or not Nim?
题目:有n堆石子,Alice和Bob轮流操作,Alice先手,每次游戏者有2种选择,要么拿走其中的任意数目的石子,要么将石子堆分成2堆,谁拿走最后的石子谁胜思路:sg打表找规律代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#i原创 2017-09-22 22:06:09 · 264 阅读 · 0 评论 -
HDU - 2509 Be the Winner
题目:有n堆石子,游戏者轮流操作,每次可以取走每堆石子连续的任意数目的石子,取走最后的石子的输。先手必胜输出Yes,先手必败输出No思路:先手必胜当且仅当:(1)游戏的SG 函 数不为0 且游戏中某个单一游戏的SG 函数大于1;(2)游戏的 SG函数 为 0 且游戏中没有单一游戏的 SG函数大于 1。代码:#pragma comment(linker原创 2017-09-21 09:45:24 · 324 阅读 · 0 评论 -
HDU - 1536 S-Nim
题目:给你一个大小为k的集合, 对于这堆石子只能取这个集合中的元素的个数。其他的同nim游戏的规则。问当前情况是先手必胜还是先手必败思路:对于n堆石子可以分成n个单独的游戏来看代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include原创 2017-09-21 10:46:04 · 262 阅读 · 0 评论 -
HDU - 1846 Brave Game
题目:游戏是这样定义的: 1、 本游戏是一个二人游戏; 2、 有一堆石子一共有n个; 3、 两人轮流进行; 4、 每走一步可以取走1…m个石子; 5、 最先取光石子的一方为胜; 如果游戏的双方使用的都是最优策略,请输出哪个人能赢。 思路:我们可以发现sg[n]=n%(m+1)代码:#pragma comment(linker, "/STAC原创 2017-09-21 10:57:44 · 558 阅读 · 0 评论 -
HDU - 1847 Good Luck in CET-4 Everybody!
题目:总共n张牌; 双方轮流抓牌; 每人每次抓牌的个数只能是2的幂次(即:1,2,4,8,16…) 抓完牌,胜负结果也出来了:最后抓完牌的人为胜者; 假设Kiki和Cici都是足够聪明,并且每次都是Kiki先抓牌,请问谁能赢呢? 思路:求出n的sg值,sg>0先手必胜,sg=0先手必败代码:#pragma comment(linker, "/STACK:1024原创 2017-09-21 12:10:15 · 504 阅读 · 0 评论 -
HDU - 1850 Being a Good Boy in Spring Festival
题目:桌子上有M堆扑克牌;每堆牌的数量分别为arr[i](i=1…M);两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。 现在我们不想研究到底先手为胜还是为负,我只想问大家: ——“先手的人如果想赢,第一步有几种选择呢?” 思路:假设sg1^sg2^...sgn==p, 选择第i堆,那么(new_arr[i]原创 2017-09-21 13:30:10 · 248 阅读 · 0 评论 -
HDU - 1848 Fibonacci again and again
题目:一个小游戏,定义如下: 1、 这是一个二人游戏; 2、 一共有3堆石子,数量分别是m, n, p个; 3、 两人轮流走; 4、 每走一步可以选择任意一堆石子,然后取走f个; 5、 f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8…等数量); 6、 最先取光所有石子的人为胜者; 假设双方都使用最优策略,请判断先手的人会赢还是后手的原创 2017-09-21 14:14:03 · 291 阅读 · 0 评论 -
HDU - 1517 A Multiplication Game
题目:给你一个数n,游戏者从p=1开始,游戏者给p*i,2=n,谁就获胜思路:求出1的sg值代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#include原创 2017-09-21 15:11:19 · 325 阅读 · 0 评论 -
ZOJ - 3591 Nim
题目:给你N,S,W,让你按照以下代码造出序列arr[i],int g=S; for(int i=0;i arr[i]=g; if(arr[i]==0) arr[i]=g=W; if(g%2==0) g=g/2;原创 2017-09-30 14:30:54 · 444 阅读 · 0 评论 -
ZOJ - 3057 Beans Game NP状态定理
题目:有3堆石子,分别有a,b,c个石子,两个游戏者轮流操作,每次可以选择取走某一堆x个石子,或选择某2堆石子在2堆石子中取走相同数目的石子。问先手必胜(输出1),还是先手必败(输出0)。思路:利用NP状态定理,把所有状态预处理出来代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#原创 2017-09-30 16:15:02 · 520 阅读 · 1 评论 -
HDU - 1729 Stone Game
题目:有n个盒子,每个盒子能装s个石子,已经装了c个石子,每次你可以选择一个盒子,你可以选择往盒子里面放1~c^2个石子,但是不能超过盒子的容量,问先手是否必胜思路:求出t,t是满足t+t*t如果c>t,则先手必胜,sg值为s-c;如果c=t,则先手必败;如果c代码:#pragma comment(linker, "/STACK:1024000000,1024000000"原创 2017-09-22 09:19:02 · 365 阅读 · 0 评论 -
ZOJ - 1039 Number Game 状态压缩
题目:2-20这19个数字的游戏。每取走一个数之后,这个数的倍数便不能再取,而且某两个取过的数的倍数的和,也不能再取。给出当前可取数字的状态,问当前状态是不是先手必胜状态。如果是,输出取法思路:利用NP状态定理和状态压缩做。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#incl原创 2017-09-30 23:14:47 · 448 阅读 · 0 评论 -
HDU - 1079 Calendar Game
题目:从1900,1,1到2001,11,4中给出一个日期,游戏者轮流操作,每个人可以选择移到下一个日期,或者选择到下一个月的相同日历日,当然这都是在合理的情况下进行操作,谁先到达2001,11,4谁胜,问是否先手必胜思路:利用NP状态定理,直接预处理出来代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#includ原创 2017-09-22 11:19:35 · 316 阅读 · 0 评论 -
HDU - 1525 Euclid's Game
题目:给定正数a,b,stan和ollie轮流操作,stan先手,每一轮,游戏者可以选择用2数中的最大值减去最小值的倍数(至少一倍),谁先减出一个0谁获胜思路:对于a,b,假设a>=b,那么局面上谁先出现a/b>=2谁就获胜,因为b,a%b肯定对应的是先手必胜或者先手必败,a/b>=2的情况下,你就可以决定是你面对b,a%b这个局面还是让对方面对这个局面代码:#pragma comme原创 2017-09-22 15:10:00 · 281 阅读 · 0 评论 -
HDU - 2516 取石子游戏 斐波那契博弈
题目:1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win". 思路:fib[1]=1,fib[2]=2,fib[i]=fib[i-1]+fib[i-2](i>=3)先手必胜当且仅当n不是Fibonacci数;反之,先手必败。代码:原创 2017-09-22 15:55:14 · 450 阅读 · 0 评论 -
POJ - 1085 Triangle War 极小极大搜索+alpha-beta剪枝
题目:有一个这样的图形一共10个顶点,有A,B两个玩家,A先手,每次每个玩家可以选择连接2个相邻但是没连接的顶点,构成的三角形属于当前操作者,并且可以额外再操作一次,谁拥有的三角形数目多谁胜。给出前面的一些操作,问你是A胜还是B胜思路:极小极大搜索+alpha-beta剪枝给两个相邻顶点的边编个号,一共有18条边分别编号为0~17,9个三角形,可以用三角形的三条边的二进制和表示原创 2017-10-01 23:10:23 · 382 阅读 · 0 评论 -
POJ - 1568 Find the Winning Move 极小极大搜索+alpha-beta剪枝
题目:在一个4*4的格子里面,x和o两个人玩游戏,x画'x',o画'o',x先手,给定x和o都已经画了一定步数的局面,问x是不是必胜的,如果是,输出他应该画在哪个位置思路:极小极大搜索+alpha-beta剪枝代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#in原创 2017-10-02 15:44:58 · 362 阅读 · 0 评论 -
POJ - 3317 Stake Your Claim 极大极小搜索+alpha-beta剪枝+记忆化搜索
题目:给出一个n*n包含0或1或.的矩阵,两个依次找一个空格子,放入0和1,最终看连通0多还是连通的1多,得分是一个选手的最大连通数减去另一个选手的。问当前局面的操作者能够得的最大的分数,及最大分数下最小字典序的操作。思路:有的说alpha-beta剪枝和记忆化搜索不能一起使用,有的说只要把参数记下来就可以一起用 代码:#pragma comment(linker, "/STACK:原创 2017-10-02 22:47:45 · 509 阅读 · 0 评论 -
HDU - 1907 John anti-nim游戏
题目:桌子上有N堆石子,游戏者轮流取石子。每次只能从一堆中取出任意数目的石子,但不能不取。取走最后一个石子者败。John先手,Brother后手思路:先手必胜当且仅当(1)游戏的 SG 函 数不为 0 且游戏中某个单一游戏的SG 函数大于1;(2)游戏的 SG函数 为 0 且游戏中没有单一游戏的 SG函数大于 1。代码:#pragma com原创 2017-09-21 09:19:26 · 235 阅读 · 0 评论 -
ZOJ - 3529 A Game Between Alice and Bob 数论+博弈
题目:有N堆石头,每次选中某一堆,把数量替换成原先的因子。全部为1则结束。思路:每个数都有一定数量的质因子数目,将其替换成因子,就相当于拿走了几个质因子,就转换成了NIM博弈,每堆石子的个数为该数的质因子的数目。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#includ原创 2017-09-29 01:49:46 · 385 阅读 · 0 评论 -
HDU - 2177 取(2堆)石子游戏 威佐夫博弈
题目:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。如果你胜,你第1次怎样取子? Input输入包含若干行,表示若干种石子的初始情原创 2017-09-22 23:50:01 · 711 阅读 · 0 评论 -
HDU - 2486 A simple stone game k倍动态减法游戏
题目:有n个石子,两个游戏者轮流操作,第一个操作的人最多能拿走n-1个石子,以后,每个游戏者最多能拿走前一个游戏者拿走数目的k倍,如果先手必败输出lose,否则输出必胜的情况下第一步拿走的石子数。(2思路:k=1时必败态是2^i。k=2时必败态是斐波那契数列。k>=3时要构造数列,将n写成数列中一些项的和,使得这些被取到的项的相邻两个倍数差距>k 那么每次去掉最后一个1 还是符合上面的原创 2017-09-25 09:27:27 · 639 阅读 · 0 评论 -
HDU - 3404 Switch lights Nim乘法
题目:给定一个n*m的矩形,上面的坐标(x,y)满足0思路:看论文,论文上面有详细介绍,要用到nim乘法运算代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include原创 2017-09-26 09:39:34 · 356 阅读 · 0 评论 -
HDU - 2999 Stone Game, Why are you always there? 求sg值
题目:给出一串连续的K个石头,一个集合allow,每次取出若干个连续的石头(数量必须为集合allow中的),最后取完的获胜,问有没有必胜策略。思路:求出sg值代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#include#i原创 2017-09-26 23:54:30 · 469 阅读 · 0 评论 -
HDU - 1527 取石子游戏
题目:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。Input输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数原创 2017-09-19 10:10:51 · 866 阅读 · 0 评论 -
HDU - 3595 GG and MM Every_SG游戏
题目:n个游戏同时进行,每个游戏有两堆石子,设个数少的那堆有x个石子,个数多的那堆有y个石子,那么每次从y中取走k*x个石子,要求k>0,且k*x思路:Every_SG游戏,可以看贾志豪的论文,里面讲得很详细代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#inc原创 2017-09-27 17:35:40 · 399 阅读 · 0 评论 -
HDU - 4111 Alice and Bob 求SG值
题目:有N堆石头,可以把两堆合成一堆,也可以把一堆去掉一个。问先手必胜还是先手必败思路:所有石子个数大于1的石子堆ai可以看成一堆石子数为sigma(ai)+n-1的堆,因为个数大于1的石子堆的合并,对方是无法阻挡的。但是1是可以阻挡的。每次的操作有:让石子数 为1的堆数减1合并堆的石子数减1合并两个个数为1的石子堆把1合并到合并堆上去代码:#pragma comm原创 2017-09-27 23:35:08 · 354 阅读 · 0 评论 -
HDU - 1524 A Chess Game 有向无环图上的博弈
题目:在有n个顶点的有向无环图上玩游戏,一些顶点上面有象棋,游戏者轮流操作,每次可以选择一个象棋将其移动到他的后继节点,不能进行操作的人输,问先手必胜还是先手必败。思路:把节点的sg值全部求出来就行了。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#includ原创 2017-09-28 09:55:15 · 550 阅读 · 0 评论 -
HDU - 3094 A tree game 树的删边博弈
题目:有一棵树,每一次操作有两步,第一步选择一条边删除,第二步把没有和根相连的边和点全部删除。不能进行操作的人输。思路:每一个节点的sg值都是其子节点的sg值加1的异或和代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#include#incl原创 2017-09-28 10:52:58 · 510 阅读 · 0 评论 -
HDU - 3590 PP and QQ 树的删边博弈+anti_sg
题目:n棵树的删边游戏,每次可以选择一棵树删边,与根节点不相连的边和节点会移走,进行最后一步操作的人输。思路:树的删边游戏:叶子节点的SG值为0;中间节点的SG值为它的所有子节点的SG值加1 后的异或和。ANTI-SG:先手必胜当且仅当:(1)游戏的SG函数不为0且游戏中某个单一游戏的SG函数大于1;(2)游戏的SG函数为0且游戏中没有单一游戏的SG函数大于1。代码:#pr原创 2017-09-28 14:01:38 · 331 阅读 · 0 评论 -
POJ - 2311 Cutting Game SG函数
题目:给你一个w*h的矩形,每次可以选择横向或纵向切割矩形,将其分成2个矩形,N次操作后,就会有N+1个矩形,谁先切割出1*1谁就获胜。思路:谁先切割出1*1谁就胜,那么就是说谁切割出1*x或x*1谁就输了。然后求SG函数就可以了。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#原创 2017-09-28 14:20:13 · 879 阅读 · 0 评论 -
POJ - 1678 I Love this Game! 记忆化dp
题目:有n个数,有一个区间[a,b],第一个人先取一个数,必须在区间内,后一次取必须比第一个数大,而且差值在区间内。问最后两个人取的数的和的差值最大为多少。思路:枚举第一次选的数,score[i]表示先手选第i个数的最大差值代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#incl原创 2017-09-28 14:55:27 · 383 阅读 · 0 评论 -
UVALive - 3668 A Funny Stone Game
题目:David 玩一个石子游戏。游戏中,有 n 堆石子,被编号为 0..n-1。两名玩家轮流取石子。 每一轮游戏,每名玩家选取 3 堆石子 i,j,k(i思路:利用SG函数来做。可以把每个石头看作是独立的游戏,那么对于某个在第i位的石头,它的后续状态是所有的在第j、k位的两个石头,这两个石头也是独立的游戏,那么sg[i] = mex{sg[j] ^ sg[k]},对于每个位置的sg[i]可以原创 2017-09-20 10:26:10 · 486 阅读 · 0 评论 -
POJ - 2068 Nim NP状态定理
题目:有S个石子,有两个队,每个队有n个人,每个人每次有数量限制,取最后一个石子的输,0,2,4,6,...属于1队,其余的属于2队,按0,1,2,3,4,..,2n,0,1,2,....的顺序轮流操作,问先手必胜还是先手必败,1队先手。思路:利用NP状态定理解决代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#in原创 2017-09-28 15:34:45 · 390 阅读 · 0 评论 -
POJ - 2599 A funny game NP状态定理
题目:有一棵无向树,从某个结点出发,两个人轮流移动,走过的结点不能再走,不能移动的人输。判断先手必胜还是先手必败,如果先手必胜,输出必胜到达的节点。思路:利用NP状态定理,把起点的SG值算出来。代码:#pragma comment(linker, "/STACK:1024000000,1024000000")#include#include#include#include#i原创 2017-09-28 16:07:14 · 814 阅读 · 0 评论 -
POJ - 3710 Christmas Game tarjan+树的删边游戏
题目:有N个局部联通的图。Harry 和 Sally 轮流从图中删边,删去一条边后,不与根节点相连的部分将被移走。Sally 为先手。图是通过从基础树中加一些边得到的。所有形成的环保证不共用边,且只与基础树有一个公共点。谁无路可走谁输。思路:(1)对于长度为奇数的环,去掉其中任意一个边之后,剩下的两个链长度同奇偶,异或之后的SG值不可能为奇数,所以它的SG值为 1;原创 2017-09-28 19:51:12 · 339 阅读 · 0 评论 -
ZOJ - 2686 Cycle Game
题目:有一个n个节点的环,相邻节点间的边上有个非负整数,至少会存在一个0,有一枚硬币,其初始位置在0处,每个人可以让硬币移动到他的2个相邻节点中的一个上去,但是要求边上的整数是一个正数才可以移动,移完之后,将边上的整数减去一个数,不能移动的人输,轮流操作。先手必胜输出YES,先手必败输出NO思路:从硬币的所在位置出发,两个方向,如果某个方向连续的非0个数为奇数的话,先手必胜。先手的策略是,原创 2017-09-29 00:44:07 · 246 阅读 · 0 评论 -
HDU - 1538 A Puzzle for Pirates 海盗分金
题目:有n个海盗,分m块金子,其中他们会按一定的顺序提出自己的分配方案,如果50%以上的人赞成,则方案通过,开始分金子,如果不通过,则把提出方案的扔到海里,下一个人继续。从第n个人开始决策,问第p个人能分多少金子,或是被扔到海里思路:参考http://blog.youkuaiyun.com/acm_cxlove/article/details/7853916 的博客做出来的,写的很详细代码:原创 2017-10-03 14:23:25 · 443 阅读 · 0 评论