
博弈
文章平均质量分 53
IED98
这个作者很懒,什么都没留下…
展开
-
hdu1907John 简单博弈
初学者可以借鉴 http://blog.youkuaiyun.com/acm_cxlove/article/details/7854530 博弈讲得比较清楚。#include #include #include #include using namespace std;int n,m;int main(){ int cas,x,ans,t; scanf("%d",&cas);原创 2015-01-02 20:34:07 · 559 阅读 · 0 评论 -
bzoj1874: [BeiJing2009 WinterCamp]取石子游戏 组合游戏
首先是最简单的Nim游戏:有N堆石子,每次从一堆中取出不为空的石子,不能取者为负。判断先手是否必胜。有一个小小的结论:后手必胜当且仅当所有石子的异或和为0。再麻烦一点。规定每次取的石子个数,比如每次只能取1,3,4。我们先考虑只有一堆石子。(以下摘自那个博客)首先定义mex(minimal excludant)运算,这是施加于一个集合的运算,表示最小的不属于这个集合的非负整数。例如me原创 2015-01-02 23:18:35 · 539 阅读 · 0 评论 -
bzoj1115: [POI2009]石子游戏Kam 组合游戏
考虑将问题转化到阶梯NIM上来。首先初始 i 格可以移掉的石子数 为 a[i]-a[i-1]事实上,若我们从 i 处取走了 x 个石子,那么下一次及以后就可以在 i+1 处多取 x 个,相当于 把 i 处的 x 个石子加到了 i+1处.问题就转化成了阶梯NIM。#include #include #include #include using namespace std;in原创 2015-01-02 21:47:25 · 931 阅读 · 0 评论 -
bzoj1022: [SHOI2008]小约翰的游戏John 博弈
裸的Anti-Nim(其实刚学会我会乱说?),结论是:当且仅当每堆石子为1且游戏SG值为0,或有些堆的石子数大于1且游戏的SG值不为0时,先手必胜。特殊情况不难证明,当SG值不为0时,若还有至少两堆石子的数目大于1,则先手将SG值变为0即可,若只有一堆石子数大于1,则先手总可以将状态变为有奇数个1。所以,当SG不为0时先手必胜。当SG为0时,至少有两堆石子的数目大于1(否则高位无法异或成0原创 2015-01-05 19:23:35 · 935 阅读 · 0 评论 -
bzoj1299: [LLH邀请赛]巧克力棒 博弈
先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0(也就是把nim游戏的必败状态留给对方),同时使得剩下的n-m根巧克力棒无论怎么取,xor和都不为0。(实际上m就是巧克力棒的xor和为0的最长子序列)。这么一来,对手就面临一个必败状态的nim游戏。如果他从n-m根中取新的巧克力棒,实际上就是新建一个xor和不为0的nim游戏,这时轮到己方操作只要将这个新的nim游戏取原创 2015-01-03 23:30:14 · 600 阅读 · 0 评论 -
bzoj3105: [cqoi2013]新Nim游戏
我们第一次拿完后,要使得剩下的火柴中不存在异或和为0的子集,否则对方会将先手必败的状态留给我们。因此我们需要寻求极大的线性无关组,答案即为总和减去极大线性无关组的权值和。显然存在线性无关组,因此必然存在解。那么如何求解极大线性无关组呢?我们能够证明这是一个拟阵,因此只需要从大到小排序,依次贪心的添加到当前集合就可以了。 每次我们记下一个数的条件是:这原创 2015-02-15 21:52:20 · 439 阅读 · 0 评论