博弈 Nim问题 POJ2234】的更多相关文章

定义: 通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是 “选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了, 则判负(因为他此刻没有任何合法的移动). 游戏状态只分两种:当前先手必胜,当前先手必败:前者称为N位置,后者称为P位置: 更为严谨的定义是: 终止状态是P位置: 能够移动到P位置的状态时N位置: 只能到N位置的状态时P位置: Nim问题的结论: (Bouton's Theorem)对于一个Nim游戏的局面(a1,a2…
本题涉及博弈论中的Nim游戏博弈. Nim游戏博弈详解链接: http://www.cnblogs.com/exponent/articles/2141477.html 本题解题报告详解链接: http://blog.csdn.net/woshi250hua/article/details/7824609 我的代码,写的较挫,4000多ms,压着时间过,时间限制是5s.我预处理了所有1-5*10^6的数的素因子个数,用的是dp 的思想,先预处理1-5*10^6的数的最小素因子,存在a数组中,然后…
前些日子我打算开了博弈基础,事后想进行总结下 一句话就是分析必胜或必败,异或为0. 以下内容来自转载: Nim游戏的概述: 还记得这个游戏吗?给出n列珍珠,两人轮流取珍珠,每次在某一列中取至少1颗珍珠,但不能在两列中取.最后拿光珍珠的人输.后来,在一份资料上看到,这种游戏称为“拈(Nim)”.据说,它源自中国,经由被贩卖到美洲的奴工们外传.辛苦的工人们,在工作闲暇之余,用石头玩游戏以排遣寂寞.后来流传到高级人士,则用便士(Pennies),在酒吧柜台上玩.最有名的玩法,是把十二枚便士放成3.4.…
John Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 4440    Accepted Submission(s): 2541 Problem Description Little John is playing very funny game with his younger brother. There is one big bo…
描述 小Hi和小Ho经常一起结对编程,他们通过各种对弈游戏决定谁担任Driver谁担任Observer. 今天他们的对弈是在一棵有根树 T 上进行的.小Hi和小Ho轮流进行删除操作,其中小Hi先手. 游戏的规则是:每次删除,小Hi或小Ho都可以选择一个非根节点,将以该节点为根的子树从 T 中删除.如果删除之后 T 只剩下一个根节点,则该次操作者胜利. 机智的小Ho认为规则对自己不利,于是他提出了一个补充规则:在小Hi第一次删除之前,小Ho可以选择是否删除根节点.如果他选择删除根节点,则原本的有根…
阶梯博弈原理参考:http://www.cnblogs.com/jiangjing/p/3849284.html 这题计算每两个之间的间隔就行了,如果是奇数个就把第一个前面的看作一个,偶数个就是两个点之间的间隔 m==1的时候特判,因为能一步就胜,m==2的情况第一个间隔要加1,因为当第一个间隔为0的时候,此时就是必胜态 #include<map> #include<set> #include<cmath> #include<queue> #include&…
Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7382    Accepted Submission(s): 4490 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买…
博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时先手的人可以一次取走所有的: 当$n=m+1$时,这时先手无论取走多少个,后手的人都能取走剩下所有的: 当$n=k*(m+1)$时,对于每$m+1$个石子,先手取$i$个,后手一定能将剩下的$(m+1-i)$个都取走,因此后手必胜: 当$n=k*(m+1)+x(0<x<m+1)$时,先手可以先取$…
题意:Nimm Game 思路:Nimm Game #include<iostream> #include<stdio.h> using namespace std; int main(){ ],i,sum,ans; while(~scanf("%d",&m)&&m){ sum=; ;i<m;++i){ scanf("%d",&a[i]); sum^=a[i]; } if(sum){ ans=; ;i&l…
目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔兰数 常用数学公式 技巧经验 容斥 组合计数 区间筛 博弈 有趣的式子 gcd有关 数论模板库 黑科技 \(long\ long\)相乘取模 子集枚举 高维前缀和 各种线性筛 高级算法 Exgcd Lucas EXCRT BSGS 高斯消元 线性基 裴蜀定理 FFT 拉格朗日插值 NTT FWT 数论 Tag…