现在的位置: 首页 > 综合 > 正文

hdu1850 Being a Good Boy in Spring Festival

2018年04月23日 ⁄ 综合 ⁄ 共 450字 ⁄ 字号 评论关闭

Nim博弈问题,因为Nim博弈第一步要转化至必败态

设    s=a1 ^ a2 ^ a3 ^ a4 ^ ...... an,那么只需要把 ak 换为 ak^s 即可,当然 前者必须要大

因为 s=a1 ^ a2 ^ a3 ^ a4 ^ ak ^ s ^ .......an=a1^a2^a3^......an ^ s = s^s=0; 所以转为了必败态

code:

#include <map>
#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;


int a[101];
int main()
{
    int t,temp,sum;
    while(~scanf("%d",&t)&&t)
    {
        sum=temp=0;
        for(int i=1;i<=t;i++)
        {
            scanf(" %d",&a[i]);
            temp=temp^a[i];
        }
        for(int i=1;i<=t;i++)
        {
            if(a[i]>(temp^a[i]))
                sum++;
        }
        printf("%d\n",sum);
    }
    return 0;
}

抱歉!评论已关闭.