HDU 4315 Climbing the Hill(阶梯博弈)
2017-11-21 07:58
423 查看
http://acm.hdu.edu.cn/showproblem.php?pid=4315
题意:
由上至下有多个格子,最顶端的是山顶,有多个球,其中有一个球是king,每次可以将球向上移动任意个格子,但是不可以跨越别的球。现将king移动到山顶者赢。
思路:
和poj1704是差不多的,如果不懂阶梯博弈的话,可以看看我的这篇博客http://www.cnblogs.com/zyb993963526/p/7868315.html。
现在还是两两分组,谁没空格可移肯定是必败状态,为什么呢?首先,如果king是在每组中的右边,那么这肯定是必败的,如果king在每组中的左边,当先手移动后,后手可以选择是否药改变当前状态,所以还是必败的。
但是要注意总球数是奇数并且king在第二个的情况,此时第一个求会和-1相邻,但是这样相邻后第一个球就是在0的位置,也就是到山顶没了,这样先手直接就赢了,所以此时要将第一组的格子数-1,不能移动到山顶。
题意:
由上至下有多个格子,最顶端的是山顶,有多个球,其中有一个球是king,每次可以将球向上移动任意个格子,但是不可以跨越别的球。现将king移动到山顶者赢。
思路:
和poj1704是差不多的,如果不懂阶梯博弈的话,可以看看我的这篇博客http://www.cnblogs.com/zyb993963526/p/7868315.html。
现在还是两两分组,谁没空格可移肯定是必败状态,为什么呢?首先,如果king是在每组中的右边,那么这肯定是必败的,如果king在每组中的左边,当先手移动后,后手可以选择是否药改变当前状态,所以还是必败的。
但是要注意总球数是奇数并且king在第二个的情况,此时第一个求会和-1相邻,但是这样相邻后第一个球就是在0的位置,也就是到山顶没了,这样先手直接就赢了,所以此时要将第一组的格子数-1,不能移动到山顶。
#include<iostream> #include<cstdio> using namespace std; int n, k; int a[1005]; int main() { while(~scanf("%d%d",&n,&k)) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(k==1) { puts("Alice"); continue; } a[0] = -1; int ans = 0; if(n%2 && k==2) a[0]=0; for(int i=n;i>0;i-=2) { ans^= a[i]-a[i-1]-1; } if(ans) puts("Alice"); else puts("Bob"); } return 0; }
相关文章推荐
- hdu 4315 Climbing the Hill(阶梯博弈转nim博弈)
- hdu 4315 Climbing the Hill (阶梯博弈)
- HDU-4315 Climbing the Hill(阶梯博弈变形)
- Climbing the Hill - HDU 4315 阶梯博弈变形
- HDU 4315 Climbing the Hill (阶梯博弈转尼姆博弈)
- hdu 4315 Climbing the Hill 博弈问题,可转化为nim游戏问题,多校联合赛(二)第六题
- HDOJ 题目4315Climbing the Hill(阶梯博弈)
- HDU 4315 Climbing the Hill [阶梯Nim]
- hdu - 4315 - Climbing the Hill - 博弈
- HDU 4315 Climbing the Hill Staircase Nim变种
- hdu4315 Climbing the Hill(阶梯博弈)
- [HDU4315]Climbing the Hill(阶梯博弈)
- 【hdu 4315】Climbing the Hill
- hdu 4315 Climbing the Hill 博弈论
- hdu 4315阶梯博弈变形
- 【hdoj 4315】Climbing the Hill
- HDU-Catching the Thief 博弈
- Game - HDU 3389 阶梯博弈
- hdu 2509 Be the Winner(博弈)
- HDU-2509-Be the Winner,博弈题~~水过~~