hdu1730 Northcott Game,Nim-sum

题解:

转化成求Nim-sum

每行黑白棋的初始间距作为每堆石子个数

如果当前为P态,则不管当前选手怎样操作,下一个选手都能使其操作后的局面又变为P态。

Nim-sum = 0,即P态。

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

int main() {
    int n, m;
    while(~scanf("%d%d", &n, &m)) {
        int sum = 0;
        for(int i=0; i<n; ++i) {
            int x, y;
            scanf("%d%d", &x, &y);
            sum ^= (abs(x-y)-1);
        }

        if(sum==0) puts("BAD LUCK!");
        else puts("I WIN!");
    }
    return 0;
}
时间: 2025-01-31 06:56:14

hdu1730 Northcott Game,Nim-sum的相关文章

【HDU1730】Northcott Game(Nim问题)

Northcott Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3101    Accepted Submission(s): 1355 Problem Description Tom和Jerry正在玩一种Northcott游戏,可是Tom老是输,因此他怀疑这个游戏是不是有某种必胜策略,郁闷的Tom现在向你求救了,你能帮帮他

LeetCode 第一题,Two Sum

今天早上起来去机房的路上还在想,一直不做算法题老是觉得不踏实.做做题总是让自己觉得自己真的在做做学习.... 这也算是一种强迫症吧. 那就从今天开始做做LeetCode,因为好久没做过了,所以第一题还是看了别人的题解和思路,算是找找感觉. 总的来说第一题是个水.... 题目还原 Two Sum Given an array of integers, find two numbers such that they add up to a specific target number. The fu

hdu 5465 Clarke and puzzle(前缀和,异或,nim博弈)

Problem Description Clarke is a patient with multiple personality disorder. One day, Clarke split into two personality a and b, they are playing a game. There is a n∗m matrix, each grid of this matrix has a number ci,j. a wants to beat b every time,

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, 即为剩下的局面为必败态.则这就一种取胜的方案

有两个数组a,b,大小都为n,数组元素的值任意整形数,无序,通过交换a,b中的元素,使得|sum(a)-sum(b)|最小

有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. 令A=sum(a)-sum(b) a的第i个元素和b的第j个元素交换后,a和b的和之差为 A'= sum(a) - a[i] + b[j] - (sum(b) - b[j] + a[i])           = sum(a) - sum(b) - 2 (a[i] - b[j])           = A - 2 (a[i] - b[j]) 设x = a[

有两个数组a,b,大小都为n,;通过交换a,b中的元素,使sum(a)-sum(b)最小。

有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. 当前数组a和数组b的和之差为    A = sum(a) - sum(b) a的第i个元素和b的第j个元素交换后,a和b的和之差为    A' = sum(a) - a[i] + b[j] - (sum(b) - b[j] + a[i])           = sum(a) - sum(b) - 2 (a[i] - b[j])           = A

[zoj3813]Alternating Sum 公式化简,线段树

题意:给一个长度不超过100000的原串S(只包含数字0-9),令T为将S重复若干次首尾连接后得到的新串,有两种操作:(1)修改原串S某个位置的值(2)给定L,R,询问T中L<=i<=j<=R的G(i,j)的和,G(i,j)=Ti-Ti+1+Ti+2-Ti+3+...+(-1)j-iTj,L,R小于1e18 思路:从公式看不出用什么方法快速计算,不妨先对公式化简.令f(i)=(j:i->R)ΣG(i,j),则有:f(i)=G(i,i)+G(i,i+1)+...+G(i,R)  (a

HDU 1003 Max Sum(经典DP,)

Max Sum Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input contains

hdu 1730 Northcott Game Nim博弈~~

Northcott Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2936    Accepted Submission(s): 1277 Problem Description Tom和Jerry正在玩一种Northcott游戏,可是Tom老是输,因此他怀疑这个游戏是不是有某种必胜策略,郁闷的Tom现在向你求救了,你能帮帮