
博弈论
Loi_a
这个作者很懒,什么都没留下…
展开
-
bzoj 1874 取石子游戏 博弈论
博弈论基础题,第一次写博弈论题目。 每堆石子的游戏是相互独立的,一个局面是由这n堆石子n个子游戏构成。 对于每堆石子,用sg[i]表示有i个石子的sg值,sg值由它的后继状态推过来:sg[i]=mex(sg[i-b[j]]); 最后的答案即为 : sg[ a[i] ] 的异或和;若ans=0则先手必败,否则先手必胜。 做第二问时,则按照输出的顺序枚举,第i堆移走k个的答案为ans^sg[a原创 2017-04-24 22:06:55 · 700 阅读 · 0 评论 -
bzoj 1299 巧克力棒 博弈论
不考虑从盒子中拿出这一操作,则剩下的部分就是一个Nim游戏。所以先手第一次只要拿到异或和为零的巧克力棒就必胜。因为若对手选择吃巧克力棒,则是必败局面。若选择拿出巧克力,则新的异或和一定不为零,因为如果一组巧克力异或和为零,则先手可以第一次的时候拿出来。 直接dfs就可以。#include<cstdio>#include<iostream>using namespace std;int n;原创 2017-04-25 15:30:54 · 752 阅读 · 0 评论 -
bzoj 1188 分裂游戏 博弈论
同一堆里的每个豆子是相互独立的,sg[i]表示第i堆里一个豆子的sg值。 sg[i]=mex( sg[j]^sg[k] ) ;#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n;int p[30],sg[30];int use[1000];int main(){ int T原创 2017-04-25 15:37:12 · 482 阅读 · 0 评论 -
bzoj 1982 Moving Pebbles 博弈论
这道题不好想,可以先想先手必败的情况,一个比较显然的情况是石子个数成对出现时先手必败,因为先手怎样做后手可以完全模仿去做。然后还有没有其他情况呢,没有。其他情况把成对的抵消掉之后,我们可以将最大的补到其他的上面,还是可以凑成上述情况。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using name原创 2017-04-25 15:47:15 · 516 阅读 · 0 评论 -
bzoj 4600 硬币游戏 博弈论
反硬币操作与c无关,只与2和3的指数有关。设sg[i][j]为2和3的指数分别为i和j时,且前面的硬币都不可翻时的sg值。然后就可以枚举p,q,对于每一个p,q,它的sg值为 sg[i-k*q][j]的异或和以及sg[i][j-k*q]的异或和,求mex。#include<cstdio>#include<cstring>#include<iostream>#define maxn 30005原创 2017-04-25 15:54:29 · 820 阅读 · 0 评论