nim博弈

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 1000010

using 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值