hdu 1846 巴什博奕

http://acm.hdu.edu.cn/showproblem.php?pid=1846

以下摘自NEU培训课件

?只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜.

?      cout<< n%(m+1)==0 ? "B" :"A";

?显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果

?n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <cmath>
#include <map>
#include <queue>
using namespace std;

#define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define rep(i,s,e) for(int i=s;i<e;i++)
#define repe(i,s,e) for(int i=s;i<=e;i++)
#define CL(a,b) memset(a,b,sizeof(a))
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdin)

int main()
{
    int ncase,n,m;
    scanf("%d",&ncase);
    while(ncase--)
    {
        scanf("%d%d",&n,&m);
        if(n%(m+1))printf("first\n");
        else printf("second\n");
    }
    return 0;
}

hdu 1846 巴什博奕

时间: 2024-10-29 14:20:21

hdu 1846 巴什博奕的相关文章

hdu 2897 巴什博奕变形

http://acm.hdu.edu.cn/showproblem.php?pid=2897 1.看清最后取的是输还是赢 2.分类讨论,想的时候,看怎么能回到最初状态---就是回到t*(p+q)+s的状态,以及怎么回到已经推出的必败态 #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <iostream> #include &l

HDU 1851 (巴什博奕 SG定理) A Simple Game

这是由n个巴什博奕的游戏合成的组合游戏. 对于一个有m个石子,每次至多取l个的巴什博奕,这个状态的SG函数值为m % (l + 1). 然后根据SG定理,合成游戏的SG函数就是各个子游戏SG函数值的异或和. 1 #include <cstdio> 2 3 int main() 4 { 5 int T, n; scanf("%d", &T); 6 while(T--) 7 { 8 scanf("%d", &n); 9 int s = 0,

HDU 2149 (巴什博奕) Public Sale

没什么好说的,一道水题. 1 #include <cstdio> 2 3 int main() 4 { 5 int n, m; 6 while(scanf("%d%d", &n, &m) == 2) 7 { 8 if(n <= m) 9 { 10 for(int i = n; i < m; i++) printf("%d ", i); 11 printf("%d\n", m); 12 continue; 1

杭电1846(巴什博奕)

Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6433    Accepted Submission(s): 4293 Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影大片,其中有一部电影就叫<勇敢者的游戏>(英文名称:Zathura),一直到现在,我依然对于电影中的部分

hdu 2188 悼念512汶川大地震遇难同胞——选拔志愿者 (博弈论,巴什博奕)

悼念512汶川大地震遇难同胞——选拔志愿者 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6982    Accepted Submission(s): 4421 Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人

博弈:巴什博奕(Bash Game)威佐夫博奕(Wythoff Game)尼姆博奕(Nimm Game)

巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜 对于巴什博弈可以考虑:n=(m+1)*k+s,即如果n%(m+1)!=0则先取者只需取走s物品即可保证获胜. HDU 1846:裸的. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<limits.h> t

巴什博奕

巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个.最后取光者得胜. 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜.因此我们发现了如何取胜的法则:如果n=(m+1)*r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜.总之,要保

博弈论一 [ 巴什博奕 ]

首先,这基本是关于ACM博弈论得一系列文章吧. 今天先讲一个最简单得博弈--巴什博奕. 其游戏规则是这样的: 有一堆n个石子,两个足够聪明的人玩,每个人可以去1-m个石子,取到最后一个石子为胜. 比如 n=7 ,m =3 那么先手必胜,过程大概如下, 先手取3,后首取i个,先手则拿4-i个,这样先手就拿到最后的石子了.(3+i+4-i=7,所以4-i就包含最后一个). 那么其实想法很简单. 当n%(m+1)==0,先手必输,否则先手必胜. 为什么? 当n%(m+1)==0,时,先手取i个,后手去

http://codeforces.com/gym/100694/problem/M The Fifth Season (巴什博奕)

题目链接 一直觉得巴什博奕是最简单的博弈遇到肯定没问题,结果被虐惨了,看完标程错了10多遍都没反应过来,当然标程题解和代码的意思也写反了,但是还是想对自己说一句mdzz,傻啊!!!这道题很不错,我觉得很有必要拿来写一篇博客. 题意:n个石子,两个人轮流取,q次询问,每次询问给定k和l,取的石子数目在k到l之间,假设两个人的取法都为最佳即向着自己赢的目标取,问一共能取多少次. 题解:巴什博奕,接下来的叙述中用a和b代替k和l.根据巴什博奕,首先ans=n%(a+b)*2是肯定的,问题就在于余数p.