DDT怎么上12(亲自经历)弄不要一堆堆疯狂的石头主演

你可以选择先拿或者后拿。如果把3堆改成n堆呢?
在回答这个问题之前,我觉得有必要科普一些东西。这些概念不难,却可以从理论上理解这一类问题。1.组合游戏有两个游戏者。有一个可能的游戏状态集。这个状态集通常是有限的。游戏规则指定了在任何状态下双方的可能的走步和对应的后继状态集。两个游戏者轮流走步。当到达一个没有后继状态的状态后,游戏结束。不管双方怎么走步,游戏总能在有限步后结束。2.P状态和N状态刚完成走步的游戏者(Previous Player) 一定胜利,而对于其他状态,下一个走步的游戏者(Next Player) 一定胜利。我们把两种状态称为P状态(P position) 和N状态(N position) ,且有以下关系:(1)所有终止状态是P状态(2)能一步到达P状态的状态为N状态(3)每一步都将到达N状态的状态为P状态P - 必败态 N - 必胜态大家仔细理解一下上文介绍的两个概念,然后理解一下下面的模型:上述关系给出了递归计算P状态和N状态的一种算法,只要状态集合构成一个n结点m边的有向无环图(DAG),即可按拓扑顺序在O(m)时间计算所有标号。在DAG上可以定义一个函数,叫Sprague-Grundy函数sg(x),意义是不在后继点函数值中的最小自然数,一般记作sg(x)=mex(S)。(比如,如果状态x有4个后继,0,0,1,4;那么sg(x)=2,因为2是不在集合{0,0,1,4}中的最小自然数)再理解一句话,就一句了:SG为0是P状态,非0为N状态。好了,基本的东西终于差不多了,先举一道例题练习一下吧!例1.有n根火柴,双方轮流拿火柴,每次可以拿1根、2根或4根,最后一个拿的人获胜。用sg函数来解这道题,递推的求。首先sg(0) = 0,sg(1) = 1,sg(2) = 2,sg(3) = 0(3只能变成1或2,而这两个数的sg函数分别为1和2,没有0),sg(4) = 1……然后一直往后推就行了。大概懂了sg函数之后,马上来一个重头戏:Nim博弈,也就是这个游戏的逆游戏。三堆数量随机的石头,两个人轮流从其中一堆中拿走任意数量的石头,拿走最后一块者胜利这个问题的答案是各堆的异或值,是0则先手负,即P状态;反之为N状态。看到这个结论是不是有人想起了什么?对,这个异或结果就是它的sg函数。这就是著名的SG定理。SG定理:若干个组合游戏的加和,其SG函数为各游戏SG函数的Nim和。最近逻辑混乱了,还没讲组合游戏的加和呢就开始讲SG定理。加和就是说,我在3个里随便拿是一个游戏,在5个里随便拿也是一个游戏,那么在一堆3个、一堆5个的两个堆中拿就是这两个游戏的加和。因为单堆n个石头的Nim游戏的SG函数值为n,所以Nim游戏是SG定理的一个特例。例2.有n个正整数,两个人轮流操作,每次可以将其中一个数变成它的真因数(比如,把12变成4或6),面对全为1局面的人输。(每个数的素因子个数为这一堆的SG函数,异或即可)--------------------------------------------------------------------------------------------------------------------讲到这我再看了看这道题目,然后无奈的说一声抱歉,因为这个题目我暂时不会求其SG函数。我在比赛里接触的SG函数题即使麻烦,但都是无法操作者判负的。不过没关系,我可以详细的讲解一下如何仅仅用概念2中的3个结论推导出答案。在分析之前,我需要一些定义:所有石头数异或为0成为T状态,否则成为S状态。仅有1块石头的称为孤单堆,大于1块的称为富裕堆。富裕堆个数大于1时为2状态,等于1时为1状态,等于0时为0状态。这样可以将状态归为T2,T1,T0,S2,S10(没有T1,想想为什么?)还需要来两个简单的结论:S可以一步到T。T必一步到S。针对题主的问题,现分析如下:S0必败,T0必胜 (这是显然的)。S1必胜。因为S1肯定可以一步到达T0,方法是目前有奇数个孤单堆就把富裕堆取完,否则剩一个,然后由1得证。S2不可能一步到T0.S2可能一次转到T2.因为S可以转到T,又S2不可以一步到T0,所以肯定可以一步到T2.T2只能一步到S2或S1因为T必须到S,而且富裕堆数量又不能直接从2到0,。所以答案就出来了:T0是N状态。S0是P状态。S1是N状态。T2是P状态。因为它只能到S2和S1,而S2可以回到T2,由于步数是有限的,所以总有一刻不得不转到S1,等价于只能转到S1,而S1是N状态,所以它是P状态。S2是N状态。因为它可以转到T2,而T2是P状态。这道题是HDU的1907,学SG定理的时候做的,当时也是试着求SG函数失败,用P状态和N状态的转换推的。那道题AC代码如下:#include &stdio.h&
int main()
int T,n,a,ans,c;
scanf("%d",&T);
while(T--)
scanf("%d",&n);
for(int i = 0;i & n;i++)
scanf("%d",&a);
if(a&1) c++;//统计富裕堆的个数
ans ^= a;//计算异或结果
if((!ans && c&2) || (ans && c)) puts("John");//如果是S0或T2就输出John
else puts("Brother");//否则输出Brother
我能想到的就这么多,如果还有问题欢迎大家讨论。
我在这里回答过了:&a href=&/question//answer/& class=&internal&&两人游戏,任意几根牙签,分成3堆,每次只能在任意一堆里面拿走任意数量的牙签,拿到最后一根为输,如何赢? - 匡世珉的回答&/a&&br&&br&这个游戏叫Misère-Nim,与传统Nim的区别在于,Misère-Nim规定,取到最后一个石子的人算输。&br&&br&对于原版Nim来说,只需要每次使得各堆数目二进制异或值为零。&br&&br&对于Misère-Nim来说,策略几乎跟原版Nim一样,直到——&br&&br&当使用原版Nim的策略会使得剩下的石堆中,没有个数大于等于2的时候:&br&&br&留下奇数堆个数为1的石堆。&br&&br&接下来一堆(ge)堆(ge)拿即可。&br&&br&&a href=&///?target=http%3A//en.wikipedia.org/wiki/Nim& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Nim&i class=&icon-external&&&/i&&/a&这里有写这种Misère-Nim的方法。
我在这里回答过了: 这个游戏叫Misère-Nim,与传统Nim的区别在于,Misère-Nim规定,取到最后一个石子的人算输。 对于原版Nim来说…
谢邀。&br&&br&这是一个&b&非常有趣&/b&的问题,刚才我大约花了一个多小时研究,&b&意外地得到非常炫酷的结论。&/b&&br&下面我将尽可能用简洁的语言论述我的解决过程,语言通俗,中学生也应该可以毫无压力地看懂。&br&&br&如果你对这类问题有所了解,你会知道这是 &a href=&///?target=http%3A///view/1101962.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Nim游戏&i class=&icon-external&&&/i&&/a& 的一种,属于&b&游戏规则十分简单,连幼儿园小朋友都能看懂,但是策略上并不容易的问题&/b&。并且,如果你涉猎过类似的问题,你会知道,该问题有一个非常有名的 anti 问题(反命题)——&br&&br&&ul&&li&&b&命题1&/b&:三堆数量随机的石头,两个人轮流从其中一堆中拿走任意数量的石头,拿走最后一块者&b&胜&/b&&br&&/li&&/ul&&br&这个 anti 问题的解决方案就是大名鼎鼎的 “&a href=&///?target=http%3A///view/674171.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&异或&i class=&icon-external&&&/i&&/a&大法”。&br&可以参见 &a href=&///?target=http%3A///archives/563& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Nim游戏的必胜策略和Xor运算的神奇应用&i class=&icon-external&&&/i&&/a&
(&a data-hash=&7410f0cbac4b82c4553fb9dfe8e3d128& href=&///people/7410f0cbac4b82c4553fb9dfe8e3d128& class=&member_mention& data-editable=&true& data-title=&@physixfan& data-tip=&p$b$7410f0cbac4b82c4553fb9dfe8e3d128& data-hovercard=&p$b$7410f0cbac4b82c4553fb9dfe8e3d128&&@physixfan&/a&),下面我用简洁地语言阐述一下。&br&&br&简单地说,就是将三堆石头的块数化为二进制,再进行 “异或运算”(&img src=&///equation?tex=%5Coplus+& alt=&\oplus & eeimg=&1&&),&br&(异或运算的规则是,对于每一位:&img src=&///equation?tex=0%5Coplus+0%3D0%0A& alt=&0\oplus 0=0
& eeimg=&1&&,&img src=&///equation?tex=0%5Coplus+1%3D1%0A& alt=&0\oplus 1=1
& eeimg=&1&&,&img src=&///equation?tex=1%5Coplus+0%3D1%0A& alt=&1\oplus 0=1
& eeimg=&1&&,&img src=&///equation?tex=1%5Coplus+1%3D0%0A& alt=&1\oplus 1=0
& eeimg=&1&&)&br&然后,先手一方只要保持三个数进行“异或”后结果是 0 就可以获胜,而对于三个数初始异或结果为 0 的情况,则是后手获胜 。&br&&br&比如,初始时,石头数三堆的石头数是 2、3、5,而&img src=&///equation?tex=2%3D%5Cleft%28+10+%5Cright%29+_%7B2%7D+& alt=&2=\left( 10 \right) _{2} & eeimg=&1&&,&img src=&///equation?tex=3%3D%5Cleft%28+11+%5Cright%29+_%7B2%7D+& alt=&3=\left( 11 \right) _{2} & eeimg=&1&&,&img src=&///equation?tex=5%3D%5Cleft%28+101+%5Cright%29+_%7B2%7D+& alt=&5=\left( 101 \right) _{2} & eeimg=&1&&,&br&而&img src=&///equation?tex=10%5Coplus+11%5Coplus+101%3D%B2%7D+& alt=&10\oplus 11\oplus 101=(100)_{2} & eeimg=&1&&,在十进制下,这个数是 4,所以先手只要从 5 块石头中取走 4 块即可获胜。由于当所有的数的异或值等于零时,二进制的每一位都出现偶数次,所以必然可以办到。&br&&br&再如,初始时,石头数三堆的石头数是 3、4、7,而&img src=&///equation?tex=3%3D%5Cleft%28+11+%5Cright%29+_%7B2%7D+& alt=&3=\left( 11 \right) _{2} & eeimg=&1&&,&img src=&///equation?tex=4%3D%5Cleft%28+100+%5Cright%29+_%7B2%7D+& alt=&4=\left( 100 \right) _{2} & eeimg=&1&&,&img src=&///equation?tex=7%3D%5Cleft%28+111+%5Cright%29+_%7B2%7D+& alt=&7=\left( 111 \right) _{2} & eeimg=&1&&,而&img src=&///equation?tex=11%5Coplus+100%5Coplus+111%3D0+& alt=&11\oplus 100\oplus 111=0 & eeimg=&1&&,所以,这是后手方必胜的情况。&br&&br&以上就是 anti 问题的基本解法。&br&&br&&b&Nim 游戏的有趣之处在于,对于一个问题 anti 问题,其结论通常并不是相反的,而往往要给出一种截然不同的策略。有些问题的 anti 问题,其复杂度和原问题完全不在一个层面上。&/b&&br&比如:&a href=&/question/& class=&internal&&一种NIM游戏(Kayles misère 反常开勒司游戏),先手方在N为多少时的必胜策略? - 计算机&/a&&br&&br&但今天过后,我意外地发现,这个著名问题的 anti 问题,也就是本问题——&br&&br&&ul&&li&&b&命题2&/b&:三堆数量随机的石头,两个人轮流从其中一堆中拿走任意数量的石头,拿走最后一块者&b&输&/b&&/li&&/ul&&br&居然……(先不剧透)&br&&br&********************&br&&br&当我开始思考这个问题时,我很快就发现,这题并不容易,从数学上完全没有思路……T_T&br&&br&&img src=&/8ce60e98ecdabbb6a205_b.jpg& data-rawwidth=&265& data-rawheight=&301& class=&content_image& width=&265&&&br&&br&貌似只能暴力求解了。&br&&br&于是我动用了计算机,花十分钟用好几个月没用过的 Java 写了一个烂烂的小程序(不必看懂,可直接看解释)——&br&&div class=&highlight&&&pre&&code class=&language-java&&&span class=&kn&&import&/span& &span class=&nn&&java.util.*&/span&&span class=&o&&;&/span&
&span class=&kn&&import&/span& &span class=&nn&&java.io.*&/span&&span class=&o&&;&/span&
&span class=&kd&&public&/span& &span class=&kd&&class&/span&
&span class=&nc&&NimThreeNumbers&/span&&span class=&o&&{&/span&
&span class=&kd&&public&/span& &span class=&kd&&static&/span& &span class=&kt&&void&/span& &span class=&nf&&main&/span&&span class=&o&&(&/span&&span class=&n&&String&/span&&span class=&o&&[]&/span& &span class=&n&&args&/span&&span class=&o&&)&/span& &span class=&kd&&throws&/span& &span class=&n&&IOException&/span&&span class=&o&&{&/span&
&span class=&kd&&final&/span& &span class=&kt&&int&/span& &span class=&n&&nMax&/span&&span class=&o&&=&/span&&span class=&mi&&50&/span&&span class=&o&&;&/span&
&span class=&kt&&int&/span& &span class=&n&&x&/span&&span class=&o&&,&/span&&span class=&n&&y&/span&&span class=&o&&,&/span&&span class=&n&&z&/span&&span class=&o&&,&/span&&span class=&n&&w&/span&&span class=&o&&;&/span&
&span class=&n&&String&/span& &span class=&n&&s&/span&&span class=&o&&=&/span&&span class=&k&&new&/span& &span class=&n&&String&/span&&span class=&o&&(&/span&&span class=&s&&&&&/span&&span class=&o&&);&/span&
&span class=&n&&String&/span& &span class=&n&&s2&/span&&span class=&o&&=&/span&&span class=&k&&new&/span& &span class=&n&&String&/span&&span class=&o&&(&/span&&span class=&s&&&&&/span&&span class=&o&&);&/span&
&span class=&kt&&boolean&/span&&span class=&o&&[][][]&/span& &span class=&n&&threeDArray&/span&&span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&kt&&boolean&/span& &span class=&o&&[&/span&&span class=&n&&nMax&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&o&&][&/span&&span class=&n&&nMax&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&o&&][&/span&&span class=&n&&nMax&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&o&&];&/span&
&span class=&c1&&//initialize&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&x&/span&&span class=&o&&=&/span&&span class=&mi&&0&/span&&span class=&o&&;&/span&&span class=&n&&x&/span&&span class=&o&&&=&/span&&span class=&n&&nMax&/span&&span class=&o&&;&/span&&span class=&n&&x&/span&&span class=&o&&++){&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&y&/span&&span class=&o&&=&/span&&span class=&n&&x&/span&&span class=&o&&;&/span&&span class=&n&&y&/span&&span class=&o&&&=&/span&&span class=&n&&nMax&/span&&span class=&o&&;&/span&&span class=&n&&y&/span&&span class=&o&&++){&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&z&/span&&span class=&o&&=&/span&&span class=&n&&y&/span&&span class=&o&&;&/span&&span class=&n&&z&/span&&span class=&o&&&=&/span&&span class=&n&&nMax&/span&&span class=&o&&;&/span&&span class=&n&&z&/span&&span class=&o&&++){&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&x&/span&&span class=&o&&][&/span&&span class=&n&&y&/span&&span class=&o&&][&/span&&span class=&n&&z&/span&&span class=&o&&]=&/span&&span class=&kc&&true&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&mi&&0&/span&&span class=&o&&][&/span&&span class=&mi&&0&/span&&span class=&o&&][&/span&&span class=&mi&&0&/span&&span class=&o&&]=&/span&&span class=&kc&&false&/span&&span class=&o&&;&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&x&/span&&span class=&o&&=&/span&&span class=&mi&&0&/span&&span class=&o&&;&/span&&span class=&n&&x&/span&&span class=&o&&&=&/span&&span class=&n&&nMax&/span&&span class=&o&&;&/span&&span class=&n&&x&/span&&span class=&o&&++){&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&y&/span&&span class=&o&&=&/span&&span class=&n&&x&/span&&span class=&o&&;&/span&&span class=&n&&y&/span&&span class=&o&&&=&/span&&span class=&n&&nMax&/span&&span class=&o&&;&/span&&span class=&n&&y&/span&&span class=&o&&++){&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&z&/span&&span class=&o&&=&/span&&span class=&n&&y&/span&&span class=&o&&;&/span&&span class=&n&&z&/span&&span class=&o&&&=&/span&&span class=&n&&nMax&/span&&span class=&o&&;&/span&&span class=&n&&z&/span&&span class=&o&&++){&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&z&/span&&span class=&o&&==&/span&&span class=&mi&&0&/span&&span class=&o&&)&/span&
&span class=&n&&z&/span&&span class=&o&&++;&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&x&/span&&span class=&o&&][&/span&&span class=&n&&y&/span&&span class=&o&&][&/span&&span class=&n&&z&/span&&span class=&o&&]){&/span&
&span class=&n&&s&/span&&span class=&o&&+=&/span& &span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&s&&& &&/span&&span class=&o&&+&/span&&span class=&n&&y&/span&&span class=&o&&+&/span&&span class=&s&&& &&/span&&span class=&o&&+&/span&&span class=&n&&z&/span&&span class=&o&&+&/span&&span class=&s&&&\n&&/span&&span class=&o&&;&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&w&/span&&span class=&o&&=&/span&&span class=&n&&z&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&o&&;&/span&&span class=&n&&w&/span&&span class=&o&&&=&/span&&span class=&n&&nMax&/span&&span class=&o&&;&/span&&span class=&n&&w&/span&&span class=&o&&++){&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&x&/span&&span class=&o&&][&/span&&span class=&n&&y&/span&&span class=&o&&][&/span&&span class=&n&&w&/span&&span class=&o&&]=&/span&&span class=&kc&&false&/span&&span class=&o&&;&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&x&/span&&span class=&o&&][&/span&&span class=&n&&z&/span&&span class=&o&&][&/span&&span class=&n&&w&/span&&span class=&o&&]=&/span&&span class=&kc&&false&/span&&span class=&o&&;&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&y&/span&&span class=&o&&][&/span&&span class=&n&&z&/span&&span class=&o&&][&/span&&span class=&n&&w&/span&&span class=&o&&]=&/span&&span class=&kc&&false&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&w&/span&&span class=&o&&=&/span&&span class=&n&&y&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&o&&;&/span&&span class=&n&&w&/span&&span class=&o&&&=&/span&&span class=&n&&z&/span&&span class=&o&&;&/span&&span class=&n&&w&/span&&span class=&o&&++){&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&x&/span&&span class=&o&&][&/span&&span class=&n&&w&/span&&span class=&o&&][&/span&&span class=&n&&z&/span&&span class=&o&&]=&/span&&span class=&kc&&false&/span&&span class=&o&&;&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&y&/span&&span class=&o&&][&/span&&span class=&n&&w&/span&&span class=&o&&][&/span&&span class=&n&&z&/span&&span class=&o&&]=&/span&&span class=&kc&&false&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&k&&for&/span&&span class=&o&&(&/span&&span class=&n&&w&/span&&span class=&o&&=&/span&&span class=&n&&x&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&o&&;&/span&&span class=&n&&w&/span&&span class=&o&&&=&/span&&span class=&n&&y&/span&&span class=&o&&;&/span&&span class=&n&&w&/span&&span class=&o&&++)&/span&
&span class=&n&&threeDArray&/span&&span class=&o&&[&/span&&span class=&n&&w&/span&&span class=&o&&][&/span&&span class=&n&&y&/span&&span class=&o&&][&/span&&span class=&n&&z&/span&&span class=&o&&]=&/span&&span class=&kc&&false&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&span class=&n&&BufferedReader&/span& &span class=&n&&in1&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&BufferedReader&/span& &span class=&o&&(&/span& &span class=&k&&new&/span& &span class=&n&&StringReader&/span& &span class=&o&&(&/span&&span class=&n&&s&/span&&span class=&o&&));&/span&
&span class=&n&&PrintWriter&/span& &span class=&n&&out1&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&PrintWriter&/span& &span class=&o&&(&/span& &span class=&k&&new&/span& &span class=&n&&BufferedWriter&/span& &span class=&o&&(&/span& &span class=&k&&new&/span& &span class=&n&&FileWriter&/span& &span class=&o&&(&/span&&span class=&s&&&NimThreeNum.txt&&/span&&span class=&o&&)));&/span&
&span class=&k&&while&/span&&span class=&o&&((&/span&&span class=&n&&s2&/span&&span class=&o&&=&/span& &span class=&n&&in1&/span&&span class=&o&&.&/span&&span class=&na&&readLine&/span&&span class=&o&&())!=&/span& &span class=&kc&&null&/span&&span class=&o&&)&/span&
&span class=&n&&out1&/span&&span class=&o&&.&/span&&span class=&na&&println&/span&&span class=&o&&(&/span&&span class=&n&&s2&/span&&span class=&o&&);&/span&
&span class=&n&&out1&/span&&span class=&o&&.&/span&&span class=&na&&close&/span&&span class=&o&&();&/span&
&span class=&o&&}&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&br&程序的思路是 “&b&筛法&/b&”,属于动态规划的一种。&br&&br&思路如下——&br&&br&把三堆石头的数量化作一个三维数组(x,y,z)(&img src=&///equation?tex=x%5Cleq+y%5Cleq+z& alt=&x\leq y\leq z& eeimg=&1&&),现在我已经知道 三堆石头分别是(0,0,1)是 显然是后手胜,那么,我留下这组数,把所有一步操作能达到这个状态的数组都筛去:包括(0,0,z)(z&1)和(0,1,z)(z&0);&br&&br&从剩下的数中在找到没有被筛去的最小的数组 (0,2,2),再把所有一步操作能达到这个状态的数组都筛去:包括(0,2,z)(z&2)和(2,2,z)(z&1)……&br&&br&(下图是比较简单的二维情况,将这个三角形拓深,就是三维情况了)&br&&img src=&/81f983a0caacfbb733d04f_b.jpg& data-rawwidth=&447& data-rawheight=&103& class=&origin_image zh-lightbox-thumb& width=&447& data-original=&/81f983a0caacfbb733d04f_r.jpg&&&br&以此类推,最后剩下的那些数组,就是&b&后手必胜&/b&的情况。你看,这个筛法 和大名鼎鼎的 质数筛选法(&a href=&///?target=http%3A///view/1425379.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&埃拉托斯特尼筛法&i class=&icon-external&&&/i&&/a&)是有异曲同工之妙的。&br&&br&嗯,跑出来的结果是这样的(部分结果)——&br&&img src=&/b793c3d16a9eb82ca7fb3c_b.jpg& data-rawwidth=&1000& data-rawheight=&207& class=&origin_image zh-lightbox-thumb& width=&1000& data-original=&/b793c3d16a9eb82ca7fb3c_r.jpg&&&br&我设置的 z 是不大于 50 的,当我观察到最后一组结果是(31,47,48)时,我心里“咯噔”了一下,因为,31 是 2 的 5 次方减1啊!&br&于是,我下意识地将三个数“异或”了一下,居然是0!&br&然后,我把所有的结果都“异或”了一下,发现——&br&&b&除了(0,0,1)和(1,1,1)以外,所有的结果竟然都是0!&/b&&br&&br&&br&我的第一反应:&b&这不可能!&/b&&br&&br&我的第二反应:&b&在这背后,一定有不可告人的秘密!&/b&&br&&br&我的第三反应:&b&这看似巧合的结果背后,必然蕴含了一些永恒的定律!&/b&&br&&br&&br&于是我开始思考,那个大名鼎鼎的原命题(命题1),如果我并不知道异或大法,我应该怎么解决。&br&&br&思考刚开始就结束了——&b&显然用相同的筛法啊!&/b&&br&&br&这种筛法所留下的,是后手必胜的情况。&br&&br&对于命题2,“筛法” 留下的第一组数是(0,0,1),然后是 (0,2,2)、(0,3,3)……&br&接下来是(1,1,1)、(1,2,3)、(1,4,5)……&br&&br&对于命题1 呢?“筛法” 留下的第一组数 (0,0,0),然后是(0,1,1)、(0,2,2)、(0,3,3)……&br&接下来呢? 是(1,2,3)、(1,4,5)……&br&&br&&b&发现了没? 除了 命题1 的(0,0,0)和(0,1,1),以及 命题2 的(0,0,1)和(1,1,1),剩下的结果,都是一模一样的啊!&/b&&br&&br&你看,两个完全相反的命题,可是用同一种筛法解决的。虽然初始条件不同,但是筛了几次以后,剩下的第一组数居然意外地变得相同了(是(1,2,3)),那么,接下来,筛法所剩下的数,也显然是一样的啊!&br&&br&所以,对于游戏者,必胜策略是这样的:&br&&br&前半部分和
命题1 完全相同,直到剩下(1,2,3)或(0,2,2)等后,策略开始转变为向(1,1,1)或(0,0,1)靠拢。&br&&br&当堆数大于3时,策略类似。&br&&br&*************************&br&&br&&b&完全相反的命题,居然有近乎完全相同的取胜策咯!&/b&&br&&br&这就是这个 Nim 游戏的奥妙所在。&br&&br&当然,这些看似反直觉的奥妙,都最终归功于数学呀!&br&&br&*************************&br&&br&P.S. 这是一个外行人写的,表述上显然不够规范,规范的表述,以及更为通用的解法,就留给数学系和计算机系的大神吧。
谢邀。 这是一个非常有趣的问题,刚才我大约花了一个多小时研究,意外地得到非常炫酷的结论。 下面我将尽可能用简洁的语言论述我的解决过程,语言通俗,中学生也应该可以毫无压力地看懂。 如果你对这类问题有所了解,你会知道这是
的一种,属于游戏…
已有帐号?
无法登录?
社交帐号登录
IIE 密码学,喜欢数学

我要回帖

更多关于 疯狂的石头主演 的文章

 

随机推荐