博弈
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[POJ2975]Nim游戏(博弈)
成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不再需要向别人察言观色的从容,一种终于停止向周围申诉求告的大气,一种不理会喧闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种并不陡峭的高度。原创 2016-03-06 21:39:37 · 707 阅读 · 0 评论 -
[POJ2311]Cutting Game(博弈Multi-SG函数)
一个理想中的学生,应该有极高的学术天分,和刻苦学习的潜能,而且他必须有独立的人格,并且在学术上有独立思考的能力。他要有志向,去不遗余力地鞭策自己,同时具有改变世界的壮志雄心。原创 2016-03-13 18:49:13 · 1087 阅读 · 0 评论 -
[BZOJ1874][BeiJing2009 WinterCamp]取石子游戏(博弈SG函数)
题目描述传送门题解求SG函数就不说了 不过我犯了一个非常智障的错误… 一般的Nim游戏判断必胜策略的方法应该是看sg(i)>k^sg(i),但是这里只是判断是否能从这一堆拿,而不是拿几个 判断拿几个的话就必须让xor值为0去到达必败态代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#incl原创 2016-03-13 19:09:46 · 883 阅读 · 0 评论 -
关于 Nim游戏与SG函数 的一点研究
引言在《博弈圣经》中博弈论的定义:我们把动物利用大自然移动的瘾魂,在决策人期待的空间里,形成三维均衡的语文学理论,称为博弈论。 博弈论又被称为对策论(Game Theory)既是现代数学的一个新分支,也是运筹学的一个重要学科。 博弈论主要研究公式化了的激励结构间的相互作用。是研究具有斗争或竞争性质现象的数学理论和方法。 博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。生物学家使原创 2016-12-25 10:36:57 · 2851 阅读 · 0 评论 -
[POJ1740]A New Stone Game(博弈)
题目描述传送门 题意:有若干堆石子,每一次需要从一堆石子中拿走一些,然后如果愿意的话,再从这堆石子中拿一些分给其它任意堆。不能操作的人负。题解最简单的情况是,如果有两堆数量一样的石子,后手只需要模仿先手的移动,来保持两堆一直相等就可以了,这样先手必败。由此也可以推知,如果石子数量相等的堆都有偶数个的话,同样先手必败。 进一步推理。如果石子堆数为奇数的话,先手只需要把最大的那一堆拿走然后分配使剩下原创 2016-12-21 17:12:04 · 1381 阅读 · 0 评论 -
[BZOJ2927][Poi1999]多边形之战(博弈)
题目描述传送门题解有邻边的多边形连边,问题转化为一棵树,有一个节点是黑色节点,每次删除一个叶子节点,能删掉黑色节点的人获胜 把黑色节点看做根 如果黑色节点只有一个儿子,先手必胜① 只有三个点并且一个黑色节点只有两个儿子,先手必败② 如果节点要是再多,并且黑色节点有多于两个儿子,那么如果有奇数个白点,先手一定能删除到先手必败的情况②,先手必胜 如果有偶数个白点,后手一定能删除到先手必败的情况原创 2017-01-07 18:03:06 · 580 阅读 · 0 评论 -
[BZOJ4147][AMPPZ2014]Euclidean Nim(博弈+数学相关)
题目描述传送门题解这题好难想啊,这么多情况根本想不全 也许还是脑子太混乱了? 抄了一点Po姐的题解…首先当nn不能整除gcd(p,q)gcd(p,q)时游戏将永远进行 因为无论如何没有公共部分的质因子无法完全消去 如果游戏可以结束那么令n/gcd(p,q),p/gcd(p,q),q/gcd(p,q)n/ gcd(p,q),p/ gcd(p,q),q/ gcd(p,q)显然与之前等价 下面开原创 2017-01-07 19:58:46 · 387 阅读 · 0 评论 -
[POJ2960]S-Nim(博弈SG函数)
我哒哒的马蹄是个美丽的错误,我只是过客,不是归人。原创 2016-03-13 18:57:31 · 655 阅读 · 0 评论 -
[POJ1067]取石子游戏(威佐夫博弈)
整形与实形的苦恼。。。原创 2016-03-13 18:52:51 · 435 阅读 · 0 评论 -
[BZOJ1022][SHOI2008]小约翰的游戏John(博弈Anti-Nim游戏)
题目描述传送门题解Anti-Nim游戏: 先手必胜当且仅当每一堆的石子个数都为1且异或值=0存在某一堆的石子个数>1且异或值≠\neq0代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;int T,n,ans;int a[50];int main(){ scanf("%d",&原创 2016-12-21 18:26:42 · 746 阅读 · 0 评论 -
[BZOJ1188][HNOI2007]分裂游戏(博弈SG函数)
题目描述传送门题解本来想写一个二维的SG,一维是位置一维是个数,但是发现做不了多少就炸了。 后来发现只有石子个数是奇数是有意义的,因为偶数的都可以模仿操作对吧。 那么这样的话就相当于是一坨1来做,然后每一次可以将一个游戏拆成两个游戏,这不就是典型的Multi-SG吗。 用SG函数记忆化搜索就可以解决了。 最后找方案的话暴力就可以,实际上还可以简化一下,ans^sg(i)^sg(j)^sg(k原创 2016-12-22 23:29:30 · 888 阅读 · 0 评论 -
[BZOJ2463] [中山市选2009]谁能赢呢?(博弈)
题目描述传送门题解还想用SG打表来着… 实际上,如果n为奇数的话Bob胜,否则Alice胜。 其实很好理解,因为如果n为奇数,走满所有格须移动偶数次,n为偶数的话奇数次,然后少到一格少移动两次,奇偶性不改变,所以即可判断胜负。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;int n;in原创 2016-12-22 23:33:41 · 528 阅读 · 0 评论 -
[BZOJ3576][Hnoi2014]江南乐(博弈Multi-SG游戏+数学相关)
题目描述传送门题解可以发现暴力就是一个裸的Multi-SG游戏。 用SG函数暴力的话,可以枚举m,然后再根据分成m份之后两个x/i和x/i+1的个数奇偶讨论一下就可以了。 但是这样的话时间是O(n2)O(n^2)的。 考虑怎么优化。发现x/i只有n√\sqrt n种取值,并且x/i和x/i+1个数的奇偶随i而变化。然后就可以用以前的一种数学方法用⌊x⌊xi⌋⌋\lfloor{{x\over {原创 2016-12-23 13:45:10 · 974 阅读 · 0 评论 -
[POJ2505]A multiplication game(博弈)
题目描述传送门 题意:起始数为1,每次可以将这个数乘2或乘9,首先得到>=n的数的人获胜。问是否有必胜策略。题解这道题我用了一个非常奇怪的方法。 当n<=18的时候随便讨论一下就行了。来看n>18的情况。 首先我们将n分解为18k∗x18^k*x的形式(x有可能为实数)。 1、当x=1的时候,先手必败。因为无论先手选择2还是9,后手都可以选择另一个数将其凑成18. 2、当x>9的时候,先手原创 2016-12-21 17:45:07 · 665 阅读 · 0 评论 -
[BZOJ1115][POI2009]石子游戏Kam(阶梯博弈)
题目描述传送门题解由于每堆石子都不少于前一堆的,并且石子总量不变,那么从这一堆拿走一些下一堆就多了一些可以拿走的。 那么我们把每堆石子和上一堆石子的差看做是每堆的石子数量,那么题目实际上就变为了从当前堆可以拿出一些石子放到下一堆里去。这就是一个典型的阶梯博弈了吖。代码#include<iostream>#include<cstring>#include<cstdio>using namesp原创 2016-12-19 23:48:07 · 636 阅读 · 0 评论 -
[HDU3389]Game(阶梯博弈)
题目描述传送门题解看题目中的两个条件:(A+B)%2=1,(A+B)%3=0(A+B)\%2=1,(A+B)\%3=0,其实可以转化成一个条件:(A+B)%6=3(A+B)\%6=3。 那么这样的话,如果将每一个点的编号写成%6\%6的形式,那么我们发现,1和2可以匹配,3和0可以匹配,4和5可以匹配。同时我们又发现1,3,4这三个点是移动的终点,也就是说不能再向其它的移动,那么我们得出:编号%6原创 2016-12-18 17:46:54 · 921 阅读 · 0 评论 -
[BZOJ3895]取石子(博弈+记搜)
每一份收获背后,都有别人看不到的努力和艰辛。原创 2016-08-16 22:25:21 · 606 阅读 · 0 评论 -
[POJ2425]A Chess Game(博弈SG函数)
题目描述传送门 题意:给出一个有向无环图,某些节点上可能有棋子。每一次可以移动一颗棋子到它的后继节点上,不能操作的人负。问是否有必胜策略。题解SG函数裸题。 注意需要用到记忆化搜索,因为后继状态可能被搜索很多次。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1005in原创 2016-12-21 17:17:08 · 760 阅读 · 0 评论 -
[POJ2484]A Funny Game(博弈)
题目描述传送门 题意:一圈硬币,每次可以拿走一个或者相邻的两个,不能操作的人负。问是否有必胜策略。 注意:硬币拿走了之后位置为空,即左右两边的硬币不相邻。题解看起来吓人实际上就是一道水题… 如果有1个或者2个都是先手必胜对吧 但是如果>=3个了之后,无论先手怎样取,后手都可以构造对称的局面,然后模仿先手的动作,最终保证必胜。代码#include<iostream>#include<cstr原创 2016-12-21 18:22:27 · 560 阅读 · 0 评论 -
[POJ3537]Crosses and Crosses(博弈Multi-SG游戏)
题目描述传送门 一个一行n列的棋盘,两人轮流在上面下棋子,连成3个棋子的人获胜。问是否有必胜策略。题解可以发现如果在点i已经有了棋子,那么就不能在i-2,i-1,i+1,i+2这几个地方下棋子,否则就会让对方赢。 那么问题可以转化为在如果在点i已经有了棋子,那么就不能在i-2,i-1,i+1,i+2这几个地方下棋子,不能下棋子的人负。 如果长度为x的棋盘上点i处下了棋子的话,实际上就是将这个游原创 2016-12-21 20:07:10 · 804 阅读 · 0 评论 -
[HDU3595]GG and MM(博弈Every-SG游戏)
题目描述传送门 题意:一共有n个游戏,每一个游戏有两堆石子,一次移动可以从大的那堆石子里拿小的那堆石子的整数倍的石子。只要是可以操作的游戏都要进行操作,不能进行操作的人负。题解定义Every-SG游戏:对于还没有结束的单一游戏,游戏者必须对该游戏进行一步决策;Every-SG游戏的其他规则与普通 SG游戏相同在通过拓扑关系计算某一个状态点的SG函数时(事实上,我们只需要计算该状态点的SG值是原创 2016-12-22 18:40:19 · 690 阅读 · 0 评论 -
[BZOJ2940][Poi2000]条纹(博弈Multi-SG游戏)
题目描述传送门题解博弈论中Multi-SG游戏裸题。代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1005int a,b,c,T,n,ans;int sg[N];int get_sg(int x){ if (sg[x]!=-1) return sg[x];原创 2016-12-22 19:26:52 · 905 阅读 · 0 评论 -
[BZOJ1982][Spoj 2021]Moving Pebbles(博弈)
题目描述传送门题解同PKU New Stone Game代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005int n;int a[N];int main(){ while (~scanf("%d",&n))原创 2016-12-22 23:30:45 · 760 阅读 · 0 评论 -
[BZOJ1299] [LLH邀请赛]巧克力棒(博弈Nim游戏)
题目描述传送门题解首先先手从中选出一个极长的子序列使它们的异或和=0,这就相当于是建立一个一个先手必败的Nim游戏。 然后后手如果再取出一个子序列就相当于是建立一个先手必胜的Nim游戏,这时候先手只需要将其变成必败的,让后手一直面对这一堆必败的Nim游戏就可以了。如果先手不能选出一个子序列使它们的异或和=0,那么他建立的Nim游戏就是先手必胜的。即使后手也必须建立先手必胜的Nim游戏,但是由于先手原创 2016-12-23 08:15:17 · 755 阅读 · 0 评论 -
[HDU2509]Be the Winner(博弈Anti-SG+Multi-SG游戏)
题目描述传送门题解就是一个Anti-SG和Multi-SG游戏的结合。 求出SG函数了之后用结论就可以了。 不过这道题是可以证明堆的大小为i的堆sg=i 用归纳法,首先sg(0)=0显然。 假设对于0-n-1sg(i)=i都成立,证明sg(n)=n 可以看出求n的sg函数实际上就是将所有相加小于n的数两两异或起来然后取一个最小的没有用过的 那么我们就需要证明0-n-1两两异或起来取遍0-原创 2016-12-23 08:56:40 · 544 阅读 · 0 评论 -
BC#90 解题报告
A题意给出一堆旗子的坐标,问有多少个行和列没有旗子。 坐标范围10610^6,个数10610^6。题解搞2个bool数组就行了… 排序被卡,ggB题意一个有根树,每个节点上都有若干个石子,每次操作可以将一个节点上的若干个石子(>0)(>0)移动到它的父亲上,当一个人没有任何合法操作时则负,判断当期局面是必胜态还是必败态。题解设根节点的深度为0,将所有深度为奇数的节点的石子数目xor起来,则先手必原创 2016-12-18 17:31:08 · 494 阅读 · 0 评论 -
[POJ1704]Georgia and Bob(阶梯博弈)
题目描述传送门题解把两个棋子之间的空格看成是一堆堆的棋子,题目就转化成了有若干堆石子每次可以从一堆中选一些移动到右边的一堆。这样就转化成了一个阶梯博弈问题。把奇数位的异或起来就行了。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100原创 2016-12-18 17:34:59 · 474 阅读 · 0 评论 -
[HDU4315]Climbing the Hill(阶梯博弈)
题目描述传送门题解和上一道题很像,但是有一个区别就是,山顶可以同时存在多个人,但是其它位置不可以。 首先考虑没有king的情况,也就是说没有合法操作的那个人判负。这样的话,可以发现和上一道题的阶梯博弈是等效的。只需要将区间的距离看成是一堆一堆的石子,然后将编号为奇数的堆异或起来就行了。 为什么是等效的呢?因为如果我们将编号为奇数的堆看成一个一个的区间的话,如果某一个人移动了区间的左端点,那么原创 2016-12-18 17:36:12 · 1136 阅读 · 0 评论 -
[POJ3710]Christmas Game(博弈树的删边游戏)
题目描述传送门 题意:有 N个局部联通的图。 Harry 和 Sally轮流从图中删边,删去一条边后,不与根节点相连的部分将被移走。Sally为先手。图是通过从基础树中加一些边得到的。所有形成的环保证不共用边,且只与基础树有一个公共点。 谁无法移动谁输。 题解博弈论中典型的树的删边游戏,以及对环的处理方法。代码#include<iostream>#include<cstring>#原创 2016-12-22 18:54:16 · 1483 阅读 · 0 评论