
博弈
何乐乐和何了了
冲冲冲!
展开
-
2016MUTC3-1003 Life Winner Bo
对于king:当行列各剩偶数步时,先手必败;否则,先手必胜对于行列各剩偶数步,先手怎么走后手只要跟着相应的走,则先手必败对于rook(车):相当于从两堆石子取数,每次可以从任一一堆取任意大于0的石子数。显然当两堆石子数相同时,先手必败,后手只要跟着取即可;否则先手胜对于knight(马):画图即可找到规律;对于queen:dp[i][j]表示从(1,1)走到(i,j)先手的状态,1原创 2016-07-26 18:28:03 · 414 阅读 · 0 评论 -
bzoj1188 [HNOI2007]分裂游戏
链接:点击打开链接题解:把一颗豆子看成一种局面,sg[i]中的i为豆子所处的位置sg[i]=mex{sg[j]^sg[k]|i当位置i的豆子个数为偶数时,sg[i]相互抵消;所以当前局面的SG是p[i]为奇数位置的sg[i]的异或和对于第一问,即考虑先手取一次后,后手取的局面的SG值,若为0,则先手必胜。后手的SG值为当前的SG^sg[i]^sg[j]^sg[k](其中i,j,k表原创 2016-09-05 08:42:26 · 340 阅读 · 0 评论 -
2016MUTC6-1003 A Simple Nim
官方题解:sg[0]=0当x=8k+7时sg[x]=8k+8,当x=8k+8时sg[x]=8k+7,其余时候sg[x]=x;(k>=0)打表找规律可得,数学归纳法可证。把每堆石子看成一种局面,sg[i]的i表示石子的个数当前局面就是n个局面的异或和根据题意推sg[i]#include #include #inc原创 2016-09-05 09:04:23 · 489 阅读 · 0 评论 -
bzoj2281
参考题解:点击打开链接并不是很懂,尤其是出现了反例不过这个dp求方案还是可以好好学下#include #include #include #include #include #include using namespace std;typedef long long LL;const int N=10000+10;const int M=1000000007;原创 2016-09-05 16:35:03 · 356 阅读 · 0 评论 -
bzoj1228 [SDOI2009]E&D
题解:将一组看成一个局面,打表算出SG,找规律#include #include #include #include #include #include using namespace std;typedef long long LL;const int N=1e4+10;int n;int dfs(int x,int y)//这个规律很神奇{ long l原创 2016-09-06 13:22:46 · 792 阅读 · 0 评论 -
bzoj3576 [Hnoi2014]江南乐
题解:把一堆石子看成一种局面,如果递推求的话会是O(n^2),超时。有一种性质:n是石子数,i是分成的堆数,如果n/i==n/(i+2),那么他们的异或和相同。所有对于n/i相同的堆数,他们的异或和只有两种情况(i为奇数和i为偶数两种)。而对于n/i的种类只有sqrt(n)种(n的约数个数)。据此递推#include #include #include #include #in原创 2016-09-06 16:36:38 · 445 阅读 · 0 评论 -
bzoj1022 [SHOI2008]小约翰的游戏John
题解:首先考虑只有1的情况,奇数个1先手必败,偶数个1先手必胜;若有大于1的堆,所有堆的xor之和为0,则先手必败;否则先手必胜。xor之和为0,那么后手的策略为 先手取多少,后手取多少;最后就会剩下两种状态(后手先取):1. 很多堆1和一堆大于1的堆2. 两个大于1的堆对于第一种情况,若1的个数为奇数,那么后手取完大于1的堆,剩下奇数个1的堆,后手必胜;若1的个数为偶数,原创 2016-09-07 11:46:10 · 521 阅读 · 0 评论 -
bzoj2437 [Noi2011]兔兔与蛋蛋
题解:我们将棋盘分成黑白格子(相邻格子颜色不同),将空格染成黑色,那么我们可以知道X为合法棋子当且仅当X在黑色格子,而O为合法棋子当且仅当O在白色格子。相邻合法棋子(空格也为合法)连边,则我们得到无向图,而它也是二部图,当空格一定是在最大匹配中时,则先手必胜;否则先手必败。若不一定在,则空格可能在偶数条交错路,或者有点可以代替空格(此时空格可不在最大匹配中),那么此时后手总有办法走到先手所在的原创 2016-09-08 14:55:18 · 694 阅读 · 0 评论