随笔分类 -  博弈论—博弈论

摘要:首先看出终止状态是全都堆在左边或者右边,然后发现黑的向左白的向右是最优策略(如果不能这样了也就该输了) 然后就不会了 参考 http://www.cnblogs.com/CQzhangyu/p/7707746.html 发现黑白之间的距离一定是不断缩小的,就相当于k堆石子,每次从1~d堆里拿走一些, 阅读全文
posted @ 2018-12-04 15:27 lokiii 阅读(269) 评论(0) 推荐(0)
摘要:先手必胜状态是黑三角在边上 然后其他情况脑补一下,n为偶数先手必胜,可以理解为从某一边取,先手总有办法让后手取得一边有奇数个 阅读全文
posted @ 2018-12-04 14:49 lokiii 阅读(143) 评论(0) 推荐(0)
摘要:这个东西卡常……预处理的时候要先把i%j,i/j都用变量表示,还要把%2变成&1…… 首先每一堆都是不相关子游戏,所以对于每一堆求sg即可 考虑暴力枚举石子数i,分割块数j,分解成子问题求xor和(其实就是根据i/j,i/j+1的个数的奇偶性xor一下即可),然后对sg[i]暴力mex,这样是n^2 阅读全文
posted @ 2018-12-04 11:29 lokiii 阅读(111) 评论(0) 推荐(0)
摘要:先预处理出来sg值,然后先手必败状态就是sg[a[i]]的xor和为0(nim) 如果xor和不为0,那么一定有办法通过一步让xor和为0,具体就是选一个最大的sg[a[i]],把它去成其他sg值的xor和,这样后手的xor和就是0了 当然并不一定要取最大的,只要sg[a[i]] (ans^sg[a 阅读全文
posted @ 2018-12-04 09:20 lokiii 阅读(196) 评论(0) 推荐(0)
摘要:必败状态是倒序排列,也就是正序对为0 然后发现,每次翻转都是有奇数个数对(\\( C_{4x+2}^{2} C_{4x+3}^{2} \\) 都是奇数),所以每次翻转丢回改变正反数对的奇偶性 又因为偶数为必败状态,所以顺序对为奇数则必胜 cpp include include using names 阅读全文
posted @ 2018-12-04 08:24 lokiii 阅读(178) 评论(0) 推荐(0)
摘要:必败状态是n为偶数并且数量相同的石子堆可以两两配对,因为这样后手可以模仿先手操作 其他状态一定可以由先手给后手一步拼出一个必败状态(用最大堆补) cpp include include include using namespace std; const int N=100005; int n,a[ 阅读全文
posted @ 2018-12-03 21:50 lokiii 阅读(185) 评论(0) 推荐(0)
摘要:也就是转换到树形删边游戏,详见 https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html cpp include include include using namespace std; const int N=1005; int T,n, 阅读全文
posted @ 2018-12-03 21:35 lokiii 阅读(125) 评论(0) 推荐(0)
摘要:预处理出SG函数,然后像普通nim一样做即可 cpp include include using namespace std; const int N=10005; int k,s[N],m,n,sg[N],v[N],ti,ans; int read() { int r=0,f=1; char p= 阅读全文
posted @ 2018-12-03 19:57 lokiii 阅读(133) 评论(0) 推荐(0)
摘要:如果全是1,那么n是奇数先手必败 否则,xor和为0先手必败 证明见 https://www.cnblogs.com/Wolfycz/p/8430991.html cpp include include using namespace std; const int N=55; int T,n,a[N 阅读全文
posted @ 2018-12-03 17:39 lokiii 阅读(114) 评论(0) 推荐(0)
摘要:声が潰れるまで歌って 何度の時間を棒に振った 阅读全文
posted @ 2018-09-24 08:07 lokiii 阅读(143) 评论(0) 推荐(0)