
博弈论
zhouyuyang233
此乃ZJ之蒟蒻也
望大牛勿喷
我等蒟蒻感激不尽
展开
-
bzoj1022: [SHOI2008]小约翰的游戏John
传送门题目大意:反Nim游戏,即取走最后一个的人输首先状态1:如果所有的堆都是1,那么堆数为偶先手必胜,否则先手必败然后状态2:如果有两个堆数量相同且不为1,那么后手拥有控场能力,即:若先手拿走一堆,那么后手可以选择将另一堆留下1个或者全拿走,使这两堆最终只剩1个或0个;若先手将一堆拿剩一个,那么后手可以选择将另一堆留下一个让先手拿或全拿走,使这两堆最终原创 2017-02-28 18:12:51 · 248 阅读 · 0 评论 -
bzoj1188: [HNOI2007]分裂游戏
传送门 明显博弈论。 而且当且仅当a[i]&1时会影响sg函数 所以我们记忆化搜索求出sg函数。(暴力枚举分裂到的位置) 然后枚举第一步的方案,xor一下==0为合法方案。 代码超短。#include<cstdlib> #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #inc原创 2017-04-02 15:45:59 · 372 阅读 · 0 评论 -
bzoj1228: [SDOI2009]E&D
传送门 SG函数 首先给sg函数打个表……发现0的分布好有规律 然后又发现1好像也挺规则的,一堆小三角型 最后发现每个数都是类似的三角形 发现如下规律: 0出现条件 i,j均%2=1 1出现条件 i%4=1,2 j%4=1,2 2出现条件 i,j%8=1,2,3,4 …… 自己可以yy出得到sg(i,j)=k的必要条件 (i-1)%2k+1 < 2k且(j-1)%2k+原创 2017-04-13 08:28:36 · 750 阅读 · 0 评论 -
bzoj1457: 棋盘游戏
传送门 这题神奇十分神奇,因为这题的胜利条件不是拿走最后一张牌了而是走到(0,0)。 然后就需要大概的转化一下了。 观察到SG函数中如果没有石子了,说明不能移动了,此时SG=0。 首先我们将所有能一步走到(0,0)的位置A集合特殊考虑,这些位置显然是先手必胜的,那么有一些位置B是只能走到这些先手必胜的位置上的,我们就可以把它们的SG函数定为0了。 然后现在的问题成了一个棋盘,走到B集合就不原创 2017-05-30 21:42:37 · 451 阅读 · 0 评论 -
bzoj1115: [POI2009]石子游戏Kam
传送门 1看题目就比较假。 首先考虑差分。 在开始情况下,第i堆石子可移动个数是a[i]-a[i-1]. 如果这个数字对少了一个,那么后面的石子堆能取的就多1个。 然后就是阶梯Nim游戏辣。#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algo原创 2017-05-21 20:20:23 · 360 阅读 · 0 评论 -
bzoj1299: [LLH邀请赛]巧克力棒
传送门 先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n-m根巧克力棒无论怎么取,xor和都不为0。 这么一来,对手就面临一个必败状态的nim游戏。如果他从n-m根中取新的巧克力棒,实际上就是新建一个xor和不为0的nim游戏,这时轮到己方操作只要将这个新的nim游戏取到xor和为0即可。 如果对手对已经取出的巧克力棒操作时,显然可以通过操作使得xor值原创 2017-05-22 21:37:19 · 368 阅读 · 0 评论 -
bzoj1874: [BeiJing2009 WinterCamp]取石子游戏
传送门 每一次我们爆求sg函数,然后求出全局sg函数 然后我们爆枚从那个堆里取几个就可以了 时间复杂度O((N+max(Ai))*M)#include<cmath>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int原创 2017-07-07 21:00:59 · 458 阅读 · 0 评论