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
#include 
#include
#define MAX 1000010

using namespace std;

int N,a[MAX];
int main()
{
    int x=0;
    for(int i=0;i


你可能感兴趣的:(ACM-博弈论)