zoukankan      html  css  js  c++  java
  • hdu2176 尼姆博弈

     如果 a1^a2^a3........^an=0,必败态。

     如果 a1^a2^a3........^an!=0,必胜态。

    对于必胜态,若a1^a2^a3........^an=k,要让对方为必败态,所以一定存在数,他的2进制有k的最高位上的1,使对方为必败态;

    所以如果k^a[i]<a[i],一定是从该数中取,a[i]-k^a[i]个。

    如果剩下一堆物品:必胜;

    如果剩下二堆,都为1,必输;

    如果剩下二堆,一堆为1,另一堆为n,必胜;

    #include<stdio.h>
    #include<string.h>
    #define maxn 200010
    int main()
    {
        int i,j,a[maxn],n;
        while(scanf("%d",&n)!=EOF)
        {
            if(!n)break;
            int flag;
            flag=0;
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                flag^=a[i];
            }
            if(flag==0)
                printf("No
    ");
            else
            {
                printf("Yes
    ");
                for(i=0;i<n;i++)
                {
                    if((flag^a[i]) < a[i])
                    {
                        printf("%d %d
    ",a[i],flag^a[i]);
                    }
                }
            }
        }
    }
  • 相关阅读:
    xml的建模
    P1341 无序字母对
    P1330 封锁阳光大学
    P2661 信息传递
    P1312 Mayan游戏
    P1514 引水入城
    C. Sad powers
    P1195 口袋的天空
    P1821 [USACO07FEB]银牛派对Silver Cow Party
    P1396 营救
  • 原文地址:https://www.cnblogs.com/sweat123/p/4753851.html
Copyright © 2011-2022 走看看