Beans Game


Time Limit: 5 Seconds Memory Limit: 32768 KB

There are three piles of beans. TT and DD pick any number of beans from any pile or the same number from any two piles by turns. Who get the last bean will win. TT and DD are very clever.

Input

Each test case contains of a single line containing 3 integers a b c, indicating the numbers of beans of these piles. It is assumed that 0 <= a,b,c <= 300 and a + b + c > 0.

Output

For each test case, output 1 if TT will win, ouput 0 if DD will win.

Sample Input

1 0 0
1 1 1
2 3 6

Sample Output

1
0
0 转自https://www.cnblogs.com/yuyixingkong/p/3939993.html 博弈题;相对于取石子游戏那题多了一堆;(但,有一点不一样,就是范围!那么就简单多了)
题目大意:有三堆豆子a,b,c(a+b+c<=300)。TT和DD轮流从其中一堆拿走任意个豆子或从其中的两种拿走同样多的豆子,最后一个拿完的获胜。
算法分析:

典型的威佐夫博弈问题是两堆,而此题为三堆。

原本以为这题是要找规律,但是找了一个小时没找到。百度解题报告,发现原来只要逆向推即可。采用递推比较快。

p[i][j][k] = 0表示状态为i,j,k时是必败态,p[i][j][k] = 1为必胜态。

从必败态往上推,能从必败态推出来的就是必胜态,赋值为1,如果是必胜点就不用往上推了。

p[i][j][k]初始化为必败点,如果该点不能从必败点转移过来,该点就是必败点。

由于必败点比较少所以可以节省时间。

#include<stdio.h>
#include<string.h> bool vis[][][]; //卡内存 void fun()
{
int i,j,k;
for(i=;i<=;i++)
{
for(j=;j<=;j++)
{
for(k=;k<=;k++)
{
if(vis[i][j][k]==)
{
int p;
for(p=i+;p<=;p++)
vis[p][j][k]=;
for(p=j+;p<=;p++)
vis[i][p][k]=;
for(p=k+;p<=;p++)
vis[i][j][p]=;
for(p=;p+i<=&&p+j<=;p++)
vis[p+i][p+j][k]=;
for(p=;p+j<=&&p+k<=;p++)
vis[i][p+j][p+k]=;
for(p=;p+i<=&&p+k<=;p++)
vis[p+i][j][p+k]=;
}
}
}
}
} int main()
{
int a,b,c;
memset(vis,,sizeof(vis));
fun();
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
printf("%d\n",vis[a][b][c]);
}
return ;
}

ZOJ - 3057 D - Beans Game(三堆威佐夫博弈)的更多相关文章

  1. HDU2177:取(2堆)石子游戏(威佐夫博弈)

    Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同 ...

  2. 【 HDU 2177 】取(2堆)石子游戏 (威佐夫博弈)

    BUPT2017 wintertraining(15) #5C hdu2177 题意 两个人轮流取石子,可以取一堆的任意非负整数个或两堆取相同个,先取完的输. 给定若干组数据:a,b表示两堆的石子数量 ...

  3. HDU2177取(2堆)石子游戏---(威佐夫博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=2177 取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    M ...

  4. HDU 2177 取(2堆)石子游戏 (威佐夫博弈)

    题目思路:威佐夫博弈: 当当前局面[a,b]为奇异局时直接输出0 否则: 1.若a==b,输出(0 0): 2.将a,b不停减一,看能否得到奇异局,若有则输出: 3.由于 ak=q*k(q为黄金分割数 ...

  5. 【POJ1067】取石子游戏 (威佐夫博弈)

    [题目] Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的 ...

  6. hdu 1527 (威佐夫博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1527 Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石 ...

  7. 简单易懂的博弈论讲解(巴什博弈、尼姆博弈、威佐夫博弈、斐波那契博弈、SG定理)

    博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时 ...

  8. BZOJ3298[USACO 2011Open]cow checkers——威佐夫博弈

    题目描述 一天,Besssie准备和FJ挑战奶牛跳棋游戏.这个游戏上在一个M*N的棋盘上, 这个棋盘上在(x,y)(0<=x棋盘的左下角是(0,0)坐标,棋盘的右上角是坐标(M-1,N-1). ...

  9. NIM游戏,NIM游戏变形,威佐夫博弈以及巴什博奕总结

    NIM游戏,NIM游戏变形,威佐夫博弈以及巴什博奕总结 经典NIM游戏: 一共有N堆石子,编号1..n,第i堆中有个a[i]个石子. 每一次操作Alice和Bob可以从任意一堆石子中取出任意数量的石子 ...

随机推荐

  1. C#进阶之路(二):事件

    一.初步了解事件 事件是委托的一个子集,为了满足“广播/订阅”模式的需求而生. 事件就是限制委托字段的包装器.限制外界对委托字段内部的访问.相当于封装. 事件就是能够发生的什么事情,主要有以下5个主体 ...

  2. 下载安装tomcat至服务器

    1.安装JDK之后,下载Tomcat:http://tomcat.apache.org/download-70.cgi选择下载32-bit/64-bit Windows Service Install ...

  3. ABP 学习系列 - 目录

    一.ABP 学习系列 - 入门介绍之单表 http://www.cnblogs.com/yabu007/p/8067694.html 二.ABP 学习系列 - 入门介绍之多表 http://www.c ...

  4. 通过maven的jar包库找到对应的jar包。

    查找连接: http://search.maven.org/ 查找实例 http://search.maven.org/#search|ga|1|a%3A%22log4j%22

  5. 【转】hurry_liu 大神STM32移植contiki入门之一:系统介绍和开发环境搭建

    前言: 由于项目的原因,需要在LPC1788(STM32 cortex-M3)上面跑contiki. 之前没有涉及到contiki,不知其为何物.不过这个不是难事,做IT的,每每遇到新事物,都不会处理 ...

  6. java代码流类。。程序怎么跟书上的结果不一样???

    总结:这个程序很容易懂.的那是这个结果我觉得有问题啊..怎么“stop”后,输出的内容是输入过的呢? 应该是没有关系的呀,与输入的值是不同的....怎么书上运行的结果和我的不一样啊 package c ...

  7. POJ 3624 Charm Bracelet(01背包模板)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45191   Accepted: 19318 ...

  8. [置顶] getenv、setenv函数(获取和设置系统环境变量) 与 环境变量

    1.getenv() 函数名: getenv 功 能: 从环境中取字符串,获取环境变量的值 头文件: stdlib.h 用 法:char *getenv(char *envvar); 函数说明:get ...

  9. 2014.12.22 几个有用的oracle正则表达式

    SELECT REGEXP_REPLACE('LSS12345', '[^0-9]') FROM DUAL 结果:12345 '[^0-9]'中的^表示‘非’上述表达式的含义是“将LSS12345中的 ...

  10. ehcache缓存入门学习

    ehcache缓存入门学习 1,概念 特性 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. 主要的特性有:1. 快速2 ...