题意:有一个一维棋盘,有格子标号1,2,3,......有n个棋子放在一些格子上,两人博弈,只能将棋子向左移,不能和其他棋子重叠,也不能跨越其他棋子,不能超越边界,不能走的人输

思路:可以用阶梯博弈来做。

那么先简单讲一下阶梯博弈:

有一个x阶阶梯,每一阶都有一定数量的石头,每次只能把某一阶梯上任意数量(不为0)的石头往下移动一阶,最多只能移动到地面,不能移动的败。这里先手的策略是这样:对奇数阶阶梯的石子进行Nim博弈,异或和为0必败。为什么不用考虑偶数呢?因为如果后手的人把m颗石头从2*n阶移到2*n-1阶,那么先手的可以把m颗石头从2*n-1阶移到2*n-2阶,重复操作直到到0阶即地面,所以我们可以不考虑偶数阶的石子数。所以奇数阶的石子被移到下一阶时,我们可以直接认为这些石头被移除了。那么直接Nim博弈就可以了。

返回这道题,如图,假如我们把棋子A向左移动一定数量,那么我们可以把棋子B向左移动相同数量来保证AB间隔不变,这里就和阶梯博弈时移动偶数阶石子奇数阶石子数量不变是一样的。所以我们从最后一个棋子开始往前分组,两个一组,每一组的间隔就是奇数阶石子个数。讲一下为什么从最后面开始分,因为最后一个间隔不会因为其他间隔的变化而变小,所以必须作为奇数阶石子保持不变(强行这样理解)。

参考:阶梯博弈算法详解(尼姆博弈进阶)

代码:

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
typedef long long ll;
const int maxn = + ;
const int seed = ;
const ll MOD = 1e9 + ;
const int INF = 0x3f3f3f3f;
using namespace std;
int a[maxn];
int main(){
int T, n;
scanf("%d", &T);
while(T--){
scanf("%d", &n);
for(int i = ; i <= n; i++)
scanf("%d", &a[i]);
sort(a + , a + n + );
int ans = ;
for(int i = n; i > ; i -= ){
ans ^= (a[i] - a[i - ] - );
}
if(ans == ) printf("Bob will win\n");
else printf("Georgia will win\n");
}
return ;
}

POJ 1704 Georgia and Bob(阶梯博弈)题解的更多相关文章

  1. poj 1704 Georgia and Bob(阶梯博弈)

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9363   Accepted: 3055 D ...

  2. hdu 4315 Climbing the Hill && poj 1704 Georgia and Bob阶梯博弈--尼姆博弈

    参考博客 先讲一下Georgia and Bob: 题意: 给你一排球的位置(全部在x轴上操作),你要把他们都移动到0位置,每次至少走一步且不能超过他前面(下标小)的那个球,谁不能操作谁就输了 题解: ...

  3. POJ 1704 Georgia and Bob(阶梯Nim博弈)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11357   Accepted: 3749 Description Geor ...

  4. POJ 1704 Georgia and Bob【博弈】

    题目链接: http://poj.org/problem?id=1704 题意: 给定棋子及其在格子上的坐标,两个人轮流选择一个棋子向左移动,每次至少移动一格,但是不可以碰到其他棋子.无路可走的时候视 ...

  5. POJ 1704 Georgia and Bob [阶梯Nim]

    题意: 每次可以向左移动一个棋子任意步,不能跨过棋子 很巧妙的转化,把棋子间的空隙看成石子堆 然后裸阶梯Nim #include <iostream> #include <cstdi ...

  6. POJ 1704 Georgia and Bob(阶梯博弈+证明)

    POJ 1704 题目链接 关于阶梯博弈有如下定理: 将所有奇数阶梯看作n堆石头,做Nim,将石头从奇数堆移动到偶数堆看作取走石头,同样地,异或值不为0(利己态)时,先手必胜. 定理证明看此博:htt ...

  7. poj 1704 Georgia and Bob(阶梯博弈)

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8656   Accepted: 2751 D ...

  8. POJ1704 Georgia and Bob (阶梯博弈)

    Georgia and Bob Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %I64d & %I64u Subm ...

  9. POJ.1704.Georgia and Bob(博弈论 Nim)

    题目链接 \(Description\) 一个1~INF的坐标轴上有n个棋子,给定坐标Pi.棋子只能向左走,不能跨越棋子,且不能越界(<1).两人每次可以将任意一个可移动的棋子向左移动一个单位. ...

随机推荐

  1. kubernetes网络原理

    1.1. 基础原则 每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中,不管是否运行在同一Node上都可以通过Pod的IP来访问. k8s中Pod的IP是最 ...

  2. virtualenv 使用

    一.安装 pip install virtualenv 因为我已经安装了pip,那么就直接用pip来安装了,简单方便. 其它的安装方式请参考官方网站:http://www.virtualenv.org ...

  3. ansible-playbook剧本

    Playbooks 是一种简单的配置管理系统与多机器部署系统的基础, 非常适合于复杂应用的部署 由 yaml 语言编写, 运行过程中, ansible-playbook 命令根据自上而下的顺序依次执行 ...

  4. xpath教程 2 - lxml库

    xpath教程 2 - lxml库 这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml. lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HT ...

  5. 新版微信小程序即将上线 新增微信支付功能

    <经济参考报>消息,新版微信小程序正在测试中,有可能将在近期正式上线.新版小程序增加了“附近门店”功能的接口,微信用户可以通过定位功能,查看提供线下服务的各类门店,并直接利用小程序实现包括 ...

  6. 【2014腾讯实习招聘-面试-移动client开发】

    版权声明:本文为博主原创文章,欢迎转载,转载请注明出处. https://blog.csdn.net/kana007/article/details/24375423         个人学习整理.如 ...

  7. Linux发展历史图

    Linux发展历史图 http://futurist.se/gldt/wp-content/uploads/12.10/gldt1210.svg

  8. Outlier Detection

    1)正态分布数据,飘出95%的可能是异常值.变量var正态标准化,|var|<=1.96的可能是异常值,further chk needed!large sample better. 对于偏态分 ...

  9. 用Anaconda安装TensorFlow+keras

    检测目前安装了哪些环境变量:conda info --envs 查看当前有哪些可以使用的tensorflow版本:conda search  --full -name tensorflow 查看ten ...

  10. html06

    1.全局函数alert();console.log();parseInt();parseString();isNaN();eval(); 用于计算表达式字符串 用于执行字符串中的js代码 eval(& ...