码迷,mamicode.com
首页 > 编程语言 > 详细

hdu1850 Being a Good Boy in Spring Festival ,尼姆博弈(Mimm game),Min sum

时间:2014-08-22 16:30:19      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   io   strong   for   ar   amp   size   sp   on   

题意:

桌子上有M堆扑克牌;每堆牌的数量分别为Ni(i=1…M);

两人轮流进行;每走一步可以任意选择一堆并取走其中的任意张牌;
桌子上的扑克全部取光,则游戏结束;最后一次取牌的人为胜者。


题解:
尼姆博奕(Nimm Game)

先求所有堆的 Nim-sum = N1 ^ N2 ^ ... NM
然后
res =Nim-sum ^ Ni
如果 res < Ni, 则先手玩家只要第一步从Ni堆中取走Ni-res个, 则剩下的局面Nim-sum = 0,
即为剩下的局面为必败态。则这就一种取胜的方案。
对于每个堆的操作至多只有一种方法可以导败必败点(Nim-sum = 0)



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

int a[200];

int main() {
    int n;
    while(~scanf("%d", &n)&&n) {
        int sum = 0;
        for(int i=0; i<n; ++i) {
            scanf("%d", &a[i]);
            sum ^= a[i];
        }
        int ans = 0;
        for(int i=0; i<n; ++i)
            if(a[i] > (sum^a[i]) ) ans++;

        printf("%d\n", ans);
    }
    return 0;
}<span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
</span></span>

hdu1850 Being a Good Boy in Spring Festival ,尼姆博弈(Mimm game),Min sum

标签:style   io   strong   for   ar   amp   size   sp   on   

原文地址:http://blog.csdn.net/yew1eb/article/details/38756583

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!