经典的尼姆博弈。

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

关于博弈的问题,AleiChen的博客写的不错,可以去看看。


题目:飞机票直达(H - 组合


代码:


Memory: 1728 KB
Time: 0 MS
Language: C++
Result: Accepted

#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=100;
int main()
{
    int ans, x, n, sum, num[maxn], i, t;
    while(scanf("%d", &n)!=EOF && n)
    {
        sum=ans=0;
        for(i=0;i<n;i++)
        {
            scanf("%d", &num[i]);
            sum^=num[i];
        }
        for(i=0;i<n;i++)
        {
            t=sum^num[i];
            if(t<num[i])ans++;
        }
        if(sum==0)printf("0\n");
        else printf("%d\n", ans);
    }
    return 0;
}