HDU 2176 取(m堆)石子游戏

/*

第一步判断是不是先手必败

非先手必败的话必有解,则输出sg为0的点

*/



/*Accepted    2176    109MS    972K    687 B    G++    Yu*/

#include <stdio.h>

const int MAXM = 200200;

int a[MAXM];



int main()

{

    int ans;

    int m;

    while(scanf("%d", &m), m)

    {

        ans = 0;

        for(int i = 0; i < m; i ++)

        {

            scanf("%d", &a[i]);

            ans ^= a[i];

        }

        if(ans == 0)

        {

            puts("No");

            continue;

        }

        else

        {

            puts("Yes");

            for(int i = 0; i < m; i ++)

            {

                int ret = ans ^ a[i];

                if(ret < a[i])

                {

                    printf("%d %d\n", a[i], ret);

                }

            }

        }

    }

    return 0;

}

你可能感兴趣的:(HDU)