POJ 1740:A New Stone Game
A New Stone Game
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 5113 Accepted: 2806
Description
Alice and Bob decide to play a new stone game.At the beginning of the game they pick n(1<=n<=10) piles of stones in a line. Alice and Bob move the stones in turn.
At each step of the game,the player choose a pile,remove at least one stones,then freely move stones from this pile to any other pile that still has stones.
For example:n=4 and the piles have (3,1,4,2) stones.If the player chose the first pile and remove one.Then it can reach the follow states.
2 1 4 2
1 2 4 2(move one stone to Pile 2)
1 1 5 2(move one stone to Pile 3)
1 1 4 3(move one stone to Pile 4)
0 2 5 2(move one stone to Pile 2 and another one to Pile 3)
0 2 4 3(move one stone to Pile 2 and another one to Pile 4)
0 1 5 3(move one stone to Pile 3 and another one to Pile 4)
0 3 4 2(move two stones to Pile 2)
0 1 6 2(move two stones to Pile 3)
0 1 4 4(move two stones to Pile 4)
Alice always moves first. Suppose that both Alice and Bob do their best in the game.
You are to write a program to determine who will finally win the game.
Input
The input contains several test cases. The first line of each test case contains an integer number n, denoting the number of piles. The following n integers describe the number of stones in each pile at the beginning of the game, you may assume the number of stones in each pile will not exceed 100.
The last test case is followed by one zero.
Output
For each test case, if Alice win the game,output 1,otherwise output 0.
Sample Input
3
2 1 3
2
1 1
0
Sample Output
1
0
题意:Alice和Bob没事就喜欢玩游戏,玩的还竟都是本身特别无聊但一出题就特别高端的那种拿石子游戏(……)。给定几个堆的石子,A和B分别拿一个堆中随意数量的石子。然后可放可不放到其它有石子的堆中,谁最后没有石子拿谁就输了。每次都是A先拿,输出1代表A赢,输出0代表B赢
发现如今做过的题,包含博弈论还有非常多类型的题目。都是从最小的情况最简单的情况開始想,之后在往后面去推。当然dp这样的就更不用说了。如果就有一个堆,那肯定是A赢,由于A直接把全部的石子拿走,B就没有石子拿了。如果有两个堆,如果是两个相等的堆。那就是B赢。由于A不管怎么拿,B都能够在还有一个堆上做同样的动作,导致一定是B拿到了最后的石子。
如果是两个不同数量的堆。那又一定是A赢。由于A先拿。能够导致上面相等的堆的情况,而这时A、B的拿的顺序已经换过来了,所以A赢。所以这时我们会发现拿走石子能够,放回石子到其它有石子的堆里这个动作是没实用的。由于A、B都採取最好策略,每一堆石子数量比不放回的情况多是没实用的,最后也都是拿走的命。
所以就这么一直地推下去。会发现整个过程就是看石子堆是不是一对一对的过程,奇数堆的一定是A赢,偶数堆的要是一对一对就是B赢。否则就是A赢。这样代码就好写了
所以这次做题的经验就是以后拿到博弈的题目,都要从最小最简单的情况搞起,再往后面推是一个好方法。
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int n[105];
int main()
{
int num;
while(cin>>num)
{
if(!num)
break;
memset(n,0,sizeof(n));
int i,temp;
if(num%2)
{
for(i=1;i<=num;i++)
cin>>temp;
cout<<1<<endl;
}
else
{
for(i=1;i<=num;i++)
{
cin>>temp;
n[temp]++;
}
int flag=0;
for(i=0;i<=104;i++)
{
if(n[i]%2)
flag=1;
}
if(flag)
cout<<1<<endl;
else
cout<<0<<endl;
}
}
return 0;
}
POJ 1740:A New Stone Game的更多相关文章
- 【POJ 1740】A New Stone Game
这真是一道博弈论的好题啊 还是采用OI届的惯用套路,从简单想起 如果只有一堆石子,那么一定先手必胜 如果有两堆石子,那么我们考虑如下两种情况 2.1 两堆石子数量相同,那么无论先手怎么拿,后手都有一种 ...
- POJ 1738:An old Stone Game 石子归并 (GarsiaWachs算法)
There is an old stone game.At the beginning of the game the player picks n(1<=n<=50000) piles ...
- POJ 1740 A New Stone Game(博弈)题解
题意:有n个石子堆,每一个都可以轮流做如下操作:选一个石堆,移除至少1个石子,然后可以把这堆石子随便拿几次,随便放到任意的其他石子数不为0的石子堆,也可以不拿.不能操作败. 思路:我们先来证明,如果某 ...
- POJ 3252:Round Numbers
POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...
- POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)
http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...
- 博弈论(男人八题):POJ 1740 A New Stone Game
A New Stone Game Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5694 Accepted: 3119 ...
- POJ 1740 A New Stone Game
A New Stone Game Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5453 Accepted: 2989 ...
- poj 1740 A New Stone Game(博弈)
A New Stone Game Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5338 Accepted: 2926 ...
- POJ 1740 A New Stone Game 又是博弈论配对找规律orz 博弈论 规律
http://poj.org/problem?id=1740 这个博弈一眼看上去很厉害很高大上让人情不自禁觉得自己不会写,结果又是找规律…… 博弈一般后手胜都比较麻烦,但是主要就是找和先手的对应关系, ...
随机推荐
- 纯js的N级联动列表框 —— 基于jQuery
多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...
- Java学习(构造方法、this关键字、super应用)
构 造 方 法 定义:对象创建时使用的方法,即在new一个新对象时,对应构造方法,直接对属性赋值. 语句格式: 修饰符(public 等) 构造方法名(必须跟当前类名一样,否则报错)(参数列表) ...
- 未能从程序集“Elmah”中加载类型“Elmah.ErrorLogModule”错误
项目名与Elmah重名了,以为是配置文件的问题,搞了好久.
- 【.NET】学习SQLite(1)
前沿 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存 ...
- phpstorm使用和配置技巧
1. 使用phpstorm的过程中,有时光标不小心变成了方块状,怎么修复回来呢? 见下图,去掉“Use block caret” 前面的对勾即可. 2.多项目并存的问题 PhpStorm或 WebSt ...
- Java Script 基础
一. JS的简介 JavaScript是一种网页编程技术,经常用于创建动态交互网页 JavaScript是一种基于对象和事件驱动的解释性脚本语言,类似C语言和Java的语法 事先不编译:逐行执行:无需 ...
- React Native踩坑之Unable to load script from assets
报错: Unable to load script from assets 'index.android.bundle'. Make sure your bundle is packaged corr ...
- markdown入门语法
目录 一: 标题 二:字体 三: 引用 四:分割线 五:图片 六:超链接 七:列表 九: 代码块 一: 标题 # 一级标题 ## 二级标题 ####### 最大六级标题 二:字体 1. 加粗字体 加粗 ...
- 在树莓派3B上安装node.js
本文主讲如何在树莓派3B上安装node.js 环境描述1. 树莓派安装了`2016-11-25-raspbian-jessie-lite`(PS:在此版本的镜像中,默认禁用了ssh,在烧录好镜像之后, ...
- FastReport.Net使用:[22]地图(Map)控件
标记有学生地区 1.在报表中放一个地图控件 将地图控件放在标题区即可,其他栏目删除. 2.双击地图控件进行地图添加. 可以再网上下载到地图数据,ESRI shapefile文件,本例中找了个省会城市地 ...