nim博弈

来源:互联网 发布:淘宝店铺怎么设置运费 编辑:程序博客网 时间:2024/05/21 19:40

nim取石子游戏, 有n堆石子,每堆有ai个石子,A和B轮流从非空的堆中取走至少一个石子。A先取,取光所有石子的一方获胜。当双方都采取最优策略时,谁能取胜?

1<=n<=100000

1<=ai<=10^9


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

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

 

取走一个石子 必胜态就是必败态了。

必败态的二进制为1。从相应的石头堆取走相应的石子使它变成0 ,就成了必胜态。

#include<iostream>#include <stdio.h>#include<memory.h>#define MAX 1000010using namespace std;int N,a[MAX];int main(){    int x=0;    for(int i=0;i<N;i++)x^=A[i];//^是亦或的符号if(x!=0)printf("A\n");else printf("B\n");return 0; }


0 0
原创粉丝点击