ACM 数论-博弈 (比赛用)

1.    Bash博弈(巴什博弈)
      只有一堆n个物品,两个人轮流从中取物,规定每次最少取一个,最多取m个,最后取光者为胜。
      /*
      if(n%(m+1)==0)  
      cout<<"后手必胜"<<endl;
      else 
      cout<<"先手必胜"<<endl;
      */

2.   威佐夫博弈(Wythoff Game):
      有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者      胜利。
      
      若两堆物品的初始值为(x,y),且x<y,则另z=y-x;
      记w=(int)[((sqrt(5)+1)/2)*z  ];
      若w=x,则先手必败,否则先手必胜。
       /*
       while(cin>>n1>>n2)
       {
        if(n1>n2)  swap(n1,n2);              //必须是看小的数是否等于那个公式
        temp=floor((n2-n1)*(1+sqrt(5.0))/2.0);
        if(temp==n1) cout<<"后手必胜"<<endl;
        else cout<<"先手必胜"<<endl;
        }
       */

 

nim博弈

 

a1 XOR a2 XOR……XOR an !=0 ->先手必胜态

a1 XOR a2XOR……XOR an==0 ->先手必败态

posted @ 2018-08-09 18:36  RomanticChopin  阅读(220)  评论(0编辑  收藏  举报
-->
Live2D