POJ 2234

来源:互联网 发布:深圳大学有网络教育吗 编辑:程序博客网 时间:2024/06/04 01:05
题意:有n堆火柴,每人每次可以从一堆中拿走任意多个,两人轮流操作,谁无子可取谁输。输入n堆火柴各自的数量,输出先手是否能赢。
分析:NP问题,必胜态N(next player wins),必败态P(previous player wins)

它是一尼姆博奕的扩展(好像是,有待确认,但很类似,大家可以去看看这个算法)————按位异或

代码:

#include <iostream>#include <stdio.h>using namespace std;int main(){    long long n,a[25],i;    while(scanf("%lld",&n)!=EOF)    {        for(i=0;i<n;i++)        scanf("%lld",&a[i]);        int s=a[0];        for(i=1;i<n;i++)        s^=a[i];        if(s!=0)        printf("Yes\n");        else        printf("No\n");    }    return 0;}

原创粉丝点击