4.1.5 Georigia and Bob
Problem description:
Georgia and Bob 在玩一个游戏。

如图所示,排成直线的格子上放有n个棋子。棋子 i 在左数第 Pi 个格子上。Georgia 和 Bob 轮流选择一个棋子向左移动。每次可以移动一格及以上任意多格,但是不允许反超其他的棋子,也不允许将两个棋子放在同一格子内。无法进行移动操作的一方失败,假设Georgia 先移动,当双方都采取最优策略时,谁会获胜?
1<=n<=1000
1<=Pi<=10000
Input:
n = 3;
p = { 1, 2 , 3}
Output:
Bob wins
思路:将其看成一种Nim游戏。
如果将棋子两两成对当作整体考虑,我们就可以把这个游戏转化为 Nim 游戏,先按棋子个数的奇偶分情况讨论。
当棋子个数为偶数时,把棋子从前往后两两组成一队,那么,我们就可以将每队棋子看成 Nim 中的一堆石子。石子堆中石子的个数等于两个棋子之间的间隔。

为什么可以这样转化,考虑其中的某一对棋子,将右边的棋子向左移动就相当于从 Nim 的石子堆中取走石子。

另一方面,将左边的棋子向左移动,石子的数量就增加了。这就与 Nim 不同了。但是,即使对手增加了石子的数量,只要将所加部分减回去就回到了原来的状态;即便自己增加了石子的数量,只要对手将所加的部分减回去也回到了原来的状态。因此,该游戏的胜负状态和所转移成的 Nim 的胜负状态是一致的。

当棋子的个数为奇数时,对最左边的棋子按下图进行特殊处理后,同样可以转成 Nim 。

Code:
int MAX_N = ;
int N, P[MAX_N];
void solve(){
if(N%==) p[N++]=;
sort(P,P+N);
int x=;
for(int i=;i+<N;i+=)
x^=(P[i+]-P[i]-);
if(x==) puts("Bob wins");
else puts("Georgia wins");
}
4.1.5 Georigia and Bob的更多相关文章
- POJ1704 Georgia and Bob
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9771 Accepted: 3220 Description Georg ...
- 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- bzoj4730: Alice和Bob又在玩游戏
Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...
- Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)
Alice and Bob Time Limit: 1000ms Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...
- Alice and Bob 要用到辗转相减
Alice and BobTime Limit: 1 Sec Memory Limit: 64 MBSubmit: 255 Solved: 43 Description Alice is a be ...
- sdutoj 2608 Alice and Bob
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2608 Alice and Bob Time L ...
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
- [翻译]Bob大叔:反思极限编程
译者注: Bob大叔14年后再次谈论极限编程.极限编程经历了14年的风风雨雨后,Bob大叔将会给它怎么样的定义那? 在我手中拿着的一本白皮薄书,在14年前彻底的改变了软件世界.这本书的标题是解析极限编 ...
- ifrog-1028 Bob and Alice are playing numbers(trie树)
题目链接: Bob and Alice are playing numbers DESCRIPTION Bob and his girl friend are playing game togethe ...
随机推荐
- html 之 position 绝对定位与相对定位(待补充)
相对定位:对于区块标签而言,占着原有的空间 绝对定位:对于网页而言,不占原来的空间
- Asp.Net 之 js/jquery获取服务器端控件
由于ASP.NET网页运行后,服务器控件会随机生成客户端id,jquery获取时候不太好操作,总结有以下3种方法:服务器控件代码:<asp:TextBox ID="txtUserID& ...
- HIHOcoder 1457 后缀自动机四·重复旋律7
思路 后缀自动机题目,题目本质上是要求求出所有不同的子串的和,SAM每个节点中存放的子串互不相同,所以对于每个节点的sum,可以发现是可以递推的,每个点对子节点贡献是sum[x]*10+c*sz[x] ...
- (转) Face-Resources
本文转自:https://github.com/betars/Face-Resources Face-Resources Following is a growing list of some ...
- mysql分区分表讲解
为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...
- 【译】第41节---EF6-事务
原文:http://www.entityframeworktutorial.net/entityframework6/transaction-in-entity-framework.aspx EF默认 ...
- 不要再混淆js的substring和substr了!(附js所有字符串方法)
一.字符串操作方法 js中字符串方法操作有很多:concat.indexOf.... 这里只要介绍两种经常混淆的字符串截取方法:substring.substr 二.从例子入手 let str = ' ...
- _equipment
该表控制切换地图自动更换装备,离开该地图时,装备自动切换为原来.,HEAD - TABARD小于0时取下装备,等于0时不更换,大于0时更换为对应装备. comment 备注 class 职业索引 1- ...
- 【三】php 数组
数组 1.数字索引数组:array('a','b','c'); 2.访问数组内容 $arr[下标] 3.新增数组元素 $arr[下标]=内容 4.使用循环访问数组 //针对数字索引 $arr=arr ...
- Django中ORM简介与单表数据操作
一. ORM简介 概念:.ORM框架是用于实现面向对象编程语言种不同类型系统的数据之间的转换 构建模型的步骤:重点 (1).配置目标数据库信息,在seting.py中设置数据库信息 DATABASE ...