poj 1704 #博弈 转化为取石子
来源:互联网 发布:seo文章内链 编辑:程序博客网 时间:2024/06/05 17:46
先是正文,后是转载。因为看了这文章才找的这道题,尽管两者并不完全是一回事。
poj
1704
问题描述:Georigia和Bob玩棋子的游戏,棋子是排在同一行的,每人每次可以移动一个棋子,移动的格数不限,但移动只能向左,且不能超过左边的棋子。当谁没有棋子可移时,谁就输了。女士优先原则,Georgia总是优先。
解题思路:
我们把棋子按位置升序排列后,从后往前把他们两两绑定成一对。如果总个数是奇数,就把最前面一个和边界(位置为0)绑定。
在同一对棋子中,如果对手移动前一个,你总能对后一个移动相同的步数,所以一对棋子的前一个和前一对棋子的后一个之间有多少个空位置对最终的结果是没有影响的。
如果对手移动后一个,就相当于取走石子
于是我们只需要考虑同一对的两个棋子之间有多少空位。
这样一来,题目就转换成了就成了POJ 1067 取石子问题,直接对每一段空位置的长度求异或就可以了。
#include <stdio.h>#include <algorithm>#define N 1001int main(){ int n,a[N],d[N],i,j,t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i = 1; i <= n; ++i) scanf("%d",a + i); std::sort(a+1,a + 1 + n); for(i = n,j = 0;i > 1;++j, i -= 2) d[j] = a[i] - a[i-1] - 1; if(i) d[j++] = a[i] - 1; for(i = 1; i < j; ++i) d[0]^= d[i]; printf(d[0] ? "Georgia will win\n":"Bob will win\n"); } return 0;}
(转)
我谈阶梯博弈( Staircase Nim )
分类: 博弈 2011-08-16 17:56 493人阅读 评论(4)收藏举报
今天在POJ做了一道博弈题..进而了解到了阶梯博弈...下面阐述一下我对于阶梯博弈的理解..首先是对阶梯博弈的阐述...博弈在一列阶梯上进行...每个阶梯上放着自然数个点..两个人进行阶梯博弈...每一步则是将一个集体上的若干个点( >=1 )移到前面去..最后没有点可以移动的人输..
如这就是一个阶梯博弈的初始状态 2 1 3 2 4 ... 只能把后面的点往前面放...如何来分析这个问题呢...其实阶梯博弈经过转换可以变为Nim..把所有奇数阶梯看成N堆石子..做nim..把石子从奇数堆移动到偶数堆可以理解为拿走石子..就相当于几个奇数堆的石子在做Nim..( 如所给样例..2^3^4=5 不为零所以先手必败)为什么可以这样来转化?
- poj 1704 #博弈 转化为取石子
- Poj 1067 取石子游戏 (博弈)
- POJ 1067 取石子游戏 (博弈)
- poj 1067 取石子游戏(博弈)
- [Wythoff博弈] poj 1067 取石子游戏
- POJ 1067 取石子游戏 威佐夫博弈
- POJ 1067 取石子 Wythoff 博弈
- POJ 1067 取石子游戏 <威佐夫博弈>
- POJ 1067 取石子游戏 威佐夫博弈
- [POJ](1067)取石子游戏 ---威佐夫博弈(博弈)
- 威佐夫博弈-取石子
- 博弈---取石子游戏
- 取石子游戏+博弈
- 博弈-取石子
- 取石子 博弈
- 【博弈】下棋、取石子、。。
- 取石子游戏-博弈
- 博弈-取石子游戏
- 解析Sav中的Battle Video 第5世代
- 设置菜单默认值设置
- loadrunner11.0 安装 破解
- linux中Framebuffer的原理及实现机制
- AJAX的学习与理解
- poj 1704 #博弈 转化为取石子
- C++程序中支持SMTP邮件发送的解决方案荟萃
- [JAVA工具]判断字符串是否为中文
- 重拾旧河山~
- 打印出数组的所有子集
- apache2.2.21下配置url地址重写 去掉index.php
- C++静态成员函数小结(转)
- (莱昂氏unix源代码分析导读-47) exec
- VC++6.0调试出错 One or more breakpoints cannot be set and have been disabled...