关闭

poj2975 Nim

375人阅读 评论(0) 收藏 举报
分类:

Nim博弈,问有多少种胜利的方法,

因为答案最多只有n,令ans=a1^a2^...^an,如果需要构造出异或值为0的数,
而且由于只能操作一堆石子,所以对于某堆石子ai,现在对于ans^ai,就是除了ai以外其他的石子
的异或值,如果ans^ai< ai,那么对于ai的话,是可以减小到ans^ai的值。将结果统计。

Source Code

Problem: 2975		User: 455707843
Memory: 756K		Time: 391MS
Language: G++		Result: Accepted
Source Code
#include <iostream>

using namespace std;

#define oo (~0U >> 1)
#define MAXN 1000 + 10

int temp[MAXN];

void input()
{
    int n;

    while (cin >> n, n)
    {
        int sum = 0;

        for (int i = 0; i < n; i++)
        {
            cin >> temp[i];
            sum ^= temp[i];
        }

        if (!sum)
        {
            cout << 0 << endl;
        }
        else
        {
            int ans = 0;

            for (int i = 0; i < n; i++)
            {
                if ((sum ^ temp[i]) < temp[i])
                {
                    ans++;
                }
            }

            cout << ans << endl;
        }
    }
}

int main()
{
    input();
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103461次
    • 积分:3084
    • 等级:
    • 排名:第11683名
    • 原创:213篇
    • 转载:13篇
    • 译文:0篇
    • 评论:2条
    最新评论