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 <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 p,n,q,f;

    while(~scanf("%d%d%d",&n,&p,&q))
    {
        if(n%(p+q)==0){printf("WIN\n");continue;}
        if(n%(p+q)<=p){printf("LOST\n");continue;}
        printf("WIN\n");
    }
    return 0;
}

hdu 2897 巴什博奕变形

时间: 2024-10-10 21:30:21

hdu 2897 巴什博奕变形的相关文章

hdu 2897(威佐夫博奕变形)

题意:容易理解. 分析:当n%(p+q)==0时,先取者必胜,必胜方案:先取q,然后对方去x个,先取者就取(p+q-x)个,最后对方就必须取玩p个, 当n%(p+q)==r(r<=p),先取者必败:当n%(p+q)==r(r>p&&r<q)先取者赢. 代码实现: #include<stdio.h> #include<string.h> #include<math.h> int main() { int n, p, q; while(sc

poj 2368 巴什博奕变形

http://poj.org/problem?id=2368 巴什博奕看这里http://blog.csdn.net/u011026968/article/details/38434777 这题比较无聊的地方是,卡时间,O(n)算法会超时 #include<iostream> #include<cstdlib> #include<stdio.h> #include<algorithm> using namespace std; int a[1010]; in

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

HDU2897( 巴什博奕变形)

邂逅明下 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2592 Accepted Submission(s): 1205 Problem Description 当日遇到月,于是有了明.当我遇到了你,便成了侣. 那天,日月相会,我见到了你.而且,大地失去了光辉,你我是否成侣?这注定是个凄美的故事.(以上是废话) 小t和所有世俗的人们一样,

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

博弈论一 [ 巴什博奕 ]

首先,这基本是关于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个,后手去

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