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

题意:

桌子上有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>
时间: 2024-10-13 18:14:11

hdu1850 Being a Good Boy in Spring Festival ,尼姆博弈(Mimm game),Min sum的相关文章

hdu 1850 Being a Good Boy in Spring Festival (尼姆博弈)

Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4658    Accepted Submission(s): 2781 Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买

hdoj 1850 Being a Good Boy in Spring Festival(尼姆博弈)

Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买个小礼物主动地 强烈地 要求洗一次碗某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说咱们玩个小游戏吧 ACM课上学的呢- 下面是一个二人小游戏:桌子上有M堆扑克牌:每堆牌的数量分别为Ni(i=1-M):两人轮流进行:每走一步可以任意选择一堆并取走其中的任意张牌:桌子上的扑克全部取光,则游戏结束:最后一次取牌的人为胜者.现在我们不想研究到底先

hdu1850 Being a Good Boy in Spring Festival(nim博弈)

Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6682    Accepted Submission(s): 4039 Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄

HDU1850 Being a Good Boy in Spring Festival(博弈)

Being a Good Boy in Spring Festival Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说 咱们玩个小

Being a Good Boy in Spring Festival(尼姆博弈)

Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 51 Accepted Submission(s): 45   Problem Description 一年在外 父母时刻牵挂春节回家 你能做几天好孩子吗寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场悄悄给爸爸买个小礼物主动地

Being a Good Boy in Spring Festival(杭电1850)(尼姆博弈)

Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4894    Accepted Submission(s): 2930 Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄

hdu 1850 Being a Good Boy in Spring Festival 博弈论之尼姆博弈,,都被自己蠢哭了!

Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5157    Accepted Submission(s): 3092 Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄

HDU-1850-Being a Good Boy in Spring Festival【Nim博弈】

Being a Good Boy in Spring Festival Problem Description 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说 咱们玩个小游戏吧 ACM课上学的呢- 下面是一个二人小游戏:桌子上有M堆扑克牌:每堆牌的数量分别为Ni(i=1-M):两人轮流进行:每走一步可以任意选择一堆并取走其中的任意张

HDU 1850 Being a Good Boy in Spring Festival (Nim博弈)

#include <iostream> #include <algorithm> #define ss(a) scanf("%d",&a) #define ss64(a) scanf("%I64d",&a) using namespace std; int main() { int a[100],i,n,m,sum,cnt,j; while(~ss(n),n) { cnt=0; for (i=0,sum=0;i<n;i+

HDU1850 Being a Good Boy in Spring Festival(NIM)

典型nim博弈题,全部异或完以后,sum=0为必败条件. 题目问的是有多少种构造必败的方法. 假设我们取第i堆石子,则其余n-i堆石子不变,状态可以由(sum^i)表示. 如果我们取完这堆石子,使(sum^i)^(new)i=0则成功构造必败条件. 显然这里的(new)i要与(sum^i)相等,所以只需要当前的i>(sum^i)即可构造出必败条件. 遍历一遍统计就好了. #include <iostream> #include <cstdio> #include <cs