博弈-尼姆博弈(nimm)

有n堆若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光着获胜。

 奇异局势:无论谁面对奇异局势都必然失败。

a1^a2^···^an==0(奇异局势),先手必败。

如果一开始不是奇异局势,那么先手可以如何选取,可以使自己获胜。

例1:(14,21,39),14^21=27,39-27=12,所以从39中拿走12个物品即可形成奇异局势;

例2:(55,81,121),55^8=102,121-102=19,所以从121中拿走19个物品即可形成奇异局势;

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
int  main()
{
   int n,m,a[105],ans,cnt,i;
   cin>>n>>m;
   ans=cnt=0;
   //ans是求异或(0异或任何数都等于任何数本身,所以一开始赋值为0)
   //cnt先手如何选取,使自己胜利的方法数
   for(i=0;i>a[i];
       ans^=a[i];
   }
   if(ans==0)
    cout<<"不可以第一次选取后使自己获胜"<

你可能感兴趣的:(数学-博弈)