[bzoj4131]并行博弈_博弈论】的更多相关文章

并行博弈 bzoj-4131 题目大意:题目链接. 注释:略. 想法:我们发现无论如何操作都会使得$(1,1)$发生改变. 所以单个$ACG$的胜利条件就是$(1,1)$是否为黑色. 如果为黑色那么可以让它变成白的.接下来无论对手如何操作都可以通过翻转$(1,1)$使得进入对手回合. 那么多个$ACG$相加就是取异或和即可. Code: #include <iostream> #include <cstdio> #include <cstring> #include &…
BZOJ_3729_Gty的游戏_博弈论+splay+dfs序 Description 某一天gty在与他的妹子玩游戏. 妹子提出一个游戏,给定一棵有根树,每个节点有一些石子,每次可以将不多于L的石子移动到父节点,询问 将某个节点的子树中的石子移动到这个节点先手是否有必胜策略. gty很快计算出了策略. 但gty的妹子十分机智,她决定修改某个节点的石子或加入某个新节点. gty不忍心打击妹子,所以他将这个问题交给了你. 另外由于gty十分绅士,所以他将先手让给了妹子. Input 第一行两个数字…
bzoj 4131: 并行博弈 (parallel) Description lyp和ld在一个n*m的棋盘上玩翻转棋,游戏棋盘坐标假设为(x, y),1 ≤ x ≤ n,1 ≤ y ≤ m,这个游戏的游戏的的游戏规则如下: 每次可以操作坐标为 (x, y) 的棋子,要求棋子 (x, y) 必须是黑色,并且同时翻转所有棋子坐标 (x', y') 满足 x'≤x, y'≤y. lyp觉得这样还不够过瘾,于是乎他打算同时玩 k 个这样的游戏, 每次可以对其中某一个游戏进行操作,lyp先手,ld后手,…
BZOJ_2017_[Usaco2009 Nov]硬币游戏_博弈论+DP Description 农夫约翰的奶牛喜欢玩硬币游戏,因此他发明了一种称为“Xoinc”的两人硬币游戏. 初始时,一个有N(5 <= N <= 2,000)枚硬币的堆栈放在地上,从堆顶数起的第I枚硬币的币值为C_i (1 <= C_i <= 100,000). 开始玩游戏时,第一个玩家可以从堆顶拿走一枚或两枚硬币.如果第一个玩家只拿走堆顶的一枚硬币,那么第二个玩家可以拿走随后的一枚或两枚硬币.如果第一个玩家拿…
博弈论 bzoj-2463 中山市选-2009 题目大意:题目链接. 注释:略. 想法: 如果$n$是偶数的话就可以被多米诺骨牌恰好覆盖,这样的话只需要先手先走向(1,1)对应的第二段,后者必定会将棋子移动到多米诺骨牌的第一段.故先手必胜. 反之同理. Code: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;…
分裂游戏 bzoj-1188 HNOI-2007 题目大意:题目链接. 注释:略. 想法: 我们发现如果一个瓶子内的小球个数是奇数才是有效的. 所以我们就可以将问题变成了一个瓶子里最多只有一个球球. 设$sg(x)$表示位置为$x$的小球的$sg$值. 显然通过$n^2$暴力转移即可. 求出了所有点的$sg$值之后,把所有有奇数个小球的位置用$SG$定理异或起来即可啦. Code: #include <iostream> #include <cstdio> #include <…
发现必胜态只和(1,1)的状态有关. 无法得知必胜的方法,只知道谁会必胜. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; void work() { scanf(; ;i<=k;i++) { scanf("%d%d",&n,&m); ;j<=n;j++) ;k<…
首先看出终止状态是全都堆在左边或者右边,然后发现黑的向左白的向右是最优策略(如果不能这样了也就该输了) 然后就不会了 参考 http://www.cnblogs.com/CQzhangyu/p/7707746.html 发现黑白之间的距离一定是不断缩小的,就相当于k堆石子,每次从1~d堆里拿走一些,根据nimk,二进制位下每一位的和都是d+1的倍数则先手必输(可以看成高配的巴什博奕) 然后设f[i][j]为前i位用了j石子,用组合数转移:f[i+1][j]=(f[i+1][j]+f[i][j-(…
取石子游戏 bzoj-1874 BeiJing2009 WinterCamp 题目大意:题目链接. 注释:略. 想法: 我们通过$SG$函数的定义来更新$SG$的转移. 如果是寻求第一步的话我们只需要求一下到底是哪个使得$SG$值是0即可. Code: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 15 #define V 101…
I Love this Game! 题目大意:题目链接 注释:略. 想法: 开始的时候以为没法dp,结果...:a>0啊! 所以可以直接dp了啊! 状态:dp[i]表示先手选了a[i]的状态. 转移:sb转移. 最后,附上丑陋的代码... ... #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 1010 int sg[N],n…