hiho一下 第四十四周 博弈游戏·Nim游戏(直接公式解)

 

证明看这http://hihocoder.com/contest/hiho44/problem/1

公式: k=a[1]^a[2]^...a[n],若k=0,则先手Alice必败,否则必赢。

感觉这种题就是靠背公式来解决的了,所有值的异或结果为0就先手必败(仅需记住这句就够应付此类题了)。其实用的思想就是如何将局面转成必赢得情况,如果只有一堆石子,那先收必胜,如何转呢?比如:两堆石子,分别为1和2,只有1的情况我们知道结果,那么就要将其转为只有1的情况,且自己是先手的,那么可以取走第二堆中的一个,就剩下1和1了,无论对手怎么取都是输的。

 

 1 #include <iostream>

 2 using namespace std;

 3 int stone[101], n, tmp;

 4 int main()

 5 {

 6     //freopen("input.txt","r",stdin);

 7     while(cin>>n){

 8         scanf("%d", &tmp);

 9         for(int i=1; i<n; i++)    scanf("%d",&stone[i]);

10         for(int i=1; i<n; i++)    tmp^=stone[i];

11         if(!tmp)    cout<<"Bob"<<endl;

12         else        cout<<"Alice"<<endl;

13     }

14     return 0;

15 }
AC代码

 

你可能感兴趣的:(游戏)