hdu1850 Being a Good Boy in Spring Festival nim博弈

来源:互联网 发布:java虚拟机最大内存 编辑:程序博客网 时间:2024/05/16 08:11

   N堆牌,没堆Ai张,问先手必胜的前提下,第一次有多少种可行的取法。

   每堆牌异或一下得到ans,如果是先取第i堆的话,其他堆异或的结果为B,那么(Ai-x) xor B==0时,说明从Ai中取走x可以留给对手一个必败态,所以对每一堆求出x后,判断一下x是否小于Ai,若小于则答案++。

#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;int n,m,k;int a[200];int main(){//    freopen("in.txt","r",stdin);    while(scanf("%d",&n) && n)    {        int ans=0;        for (int i=1; i<=n; i++)        scanf("%d",&a[i]),ans^=a[i];        int ct=0;        for (int i=1; i<=n; i++)        {            ans^=a[i];            if (ans<a[i]) ct++;            ans^=a[i];        }        cout<<ct<<endl;    }    return 0;}


0 0