题目链接:https://cn.vjudge.net/problem/HDU-4315

知识点:  博弈论

题目大意:

  \(Alice\) 和 \(Bob\) 轮流指挥 \(N\) 个人爬山,这 \(N\)个人在山顶下的不同层,国王是第 \(k\) 个人。山的每一层都最多只能容纳 \(1\) 个人(除了山顶),两个玩家每次都能指挥任意一个人向上爬任意层直到山顶,但不能让一个人越过另一个人。指挥国王爬到山顶上即可获胜。

解题思路:

  首先,如果国王是第一个人,先手必胜。

  如果 \(N\) 是偶数,关键局面为:对于所有合法的 \(i\),有第 \(2i\) 个人和第 \(2i-1\) 个人相邻。易知此时当国王是第偶数个人时后手必胜,因为无论先手怎么操作,后手都至少能维持住这个局面,或者取得胜利;当国王是第奇数个人时也是后手必胜,后手可以维持这个关键局面直到国王成为第 \(3\) 个人,并继续保持第 \(2i-1\) 和第 \(2i\) 相邻,先手接下来迟早会被迫将第一个人移到山顶,后手下一步将第二个人移到山顶的下一个位置,这是一个后手必胜的局面。现在游戏已经转换成一个 \(Nim\) 博弈,石子就是第 \(2i-1\) 和第 \(2i\) 个人之间的间隔。

  如果 \(N\) 是奇数,可以在第一个人前面再想象一个人,他在山顶的再上一层,当第一个人被放到山顶的时候,二者相邻,此时又转换成偶数个人的情况了。有一种特殊情况是当国王是第二个人的时候,那么想象出来的这个人就得放在山顶,当第一个人被放到山顶的下一层时二者即可相邻,因为先手如果将第一个人直接放到山顶,那么后手能直接取胜。

AC代码:

 #include <bits/stdc++.h>

 using namespace std;
const int maxn=;
int pos[maxn];
int main(){
int N,k;
while(scanf("%d%d",&N,&k)==){
for(int i=;i<=N;i++) scanf("%d",&pos[i]);
if(k==){
printf("Alice\n");
continue;
}
if(N%==){
int sg=;
for(int i=;i<=N;i+=)
sg^=(pos[i+]-pos[i]-);
if(!sg) printf("Bob\n");
else printf("Alice\n");
}
else{
int sg=pos[];
if(k==) sg--;
for(int i=;i<=N;i+=)
sg^=(pos[i+]-pos[i]-);
if(!sg) printf("Bob\n");
else printf("Alice\n");
}
}
return ;
}

HDU4315 Climbing the Hill的更多相关文章

  1. HDU-4315 Climbing the Hill

    题目链接 先回到阶梯博弈的裸题中,比如POJ-1704,所有的块只能向左移并且不能跨越,这个向左移的结果我们可以理解为将左边的宽度减少使得右边的宽度增加,等同于阶梯模型中将石子从高阶移动到低阶.那么最 ...

  2. HDU 4315 Climbing the Hill (阶梯博弈转尼姆博弈)

    Climbing the Hill Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Su ...

  3. hdu 4315 Climbing the Hill(阶梯博弈转nim博弈)

    Climbing the Hill Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  4. 【hdu 4315】Climbing the Hill

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

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

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

  6. HDU 4315:Climbing the Hill(阶梯博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=4315 题意:有n个人要往坐标为0的地方移动,他们分别有一个位置a[i],其中最靠近0的第k个人是king,移动的 ...

  7. hdu 4315 Climbing the Hill 博弈论

    题意:有n个人爬山,山顶坐标为0,其他人按升序给出,不同的坐标只能容纳一个人(山顶不限),Alice和Bob轮流选择一个人让他移动任意步,但不能越过前面的人,且不能和前面一个人在相同的位置.现在有一个 ...

  8. HDU 4315 Climbing the Hill [阶梯Nim]

    传送门 题意: 和上题基本一样:山顶可以有多人,谁先把king放到山顶谁就胜 并不太明白 #include <iostream> #include <cstdio> #incl ...

  9. HDU 4315 Climbing the Hill(阶梯博弈)

    http://acm.hdu.edu.cn/showproblem.php?pid=4315 题意:由上至下有多个格子,最顶端的是山顶,有多个球,其中有一个球是king,每次可以将球向上移动任意个格子 ...

随机推荐

  1. PIL库的学习总结及生成GIF

    一.PIL库的概述 PIL(Python Image Library)库是Python语言的第三方库,需要通过pip工具安装. 打开cmd,输入 pip install pillow PIL库支持图像 ...

  2. 【Linux常见命令】tail命令

    tail - output the last part of files tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件. tail -f filename  ...

  3. 初入React源码(一)

    导语 React是我接触的第二个框架,我最初开始接触的是vue,但是并没有深入的理解过vue,然后在工作过程中,我开始使用了React,现在已经觉得React会比vue更加实用,但是这只是个人观点,可 ...

  4. 如何在github上递交高质量的pull request

    开源的一大乐趣就是任何人都可以参与其中.试想下一个流行的项目就有你贡献的代码,是一件多么爽的事情!你可以帮助项目健康发展,添加你希望添加的功能,以及修复你发现的BUG. 作为全球最大的开源社区GitH ...

  5. Jdbc批处理一点异同

    同样的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class TestBatch {   public stati ...

  6. 8) drf 三大认证 认证 权限 频率

    一.三大认证功能分析 1)APIView的 dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial(request, *ar ...

  7. 解决python语言的工具pycharm以及Windows电脑安装pygame模块的问题

    人生苦短,我用python,python作为一门当今时代潮流性的语言,已经成为大多数的年轻程序猿们向往的目标,python中有许多的库, 其中有一个pygame库是作为开发2D游戏必不可少的开发库,是 ...

  8. Web 跨域请求问题的解决方案- CORS 方案

    1.什么是跨域 跨域是指跨域名的访问,以下情况都属于跨域: 跨域现象 实例 域名不相同 www.baidu.com与www.taobao 一级域名相同,但是端口不相同 www.baidu.com:80 ...

  9. 【Redis】跳跃表原理分析与基本代码实现(java)

    最近开始看Redis设计原理,碰到一个从未遇见的数据结构:跳跃表(skiplist).于是花时间学习了跳表的原理,并用java对其实现. 主要参考以下两本书: <Redis设计与实现>跳表 ...

  10. 布局问题杂(html和css)

    \(一.删除线可以用一对strike标签括起来\) <p><strike>删除线可以用一对strike标签括起来</strike></p> \(\col ...