zoukankan      html  css  js  c++  java
  • HDU 4315 Climbing the Hill(阶梯博弈)

    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,不能移动到山顶。

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 int n, k;
     6 int a[1005];
     7 
     8 int main()
     9 {
    10     while(~scanf("%d%d",&n,&k))
    11     {
    12         for(int i=1;i<=n;i++)  scanf("%d",&a[i]);
    13         if(k==1)
    14         {
    15             puts("Alice");
    16             continue;
    17         }
    18         a[0] = -1;
    19         int ans = 0;
    20         if(n%2 && k==2)  a[0]=0;
    21         for(int i=n;i>0;i-=2)
    22         {
    23             ans^= a[i]-a[i-1]-1;
    24         }
    25         if(ans)  puts("Alice");
    26         else puts("Bob");
    27     }
    28     return 0;
    29 }
  • 相关阅读:
    暑期实践
    noi前第十九场 题解
    noi前第十八场 题解
    noi前第十七场 题解
    noi前第十六场 题解
    noi前第十五场 题解
    noi前第十四场 题解
    noi前第十三场 题解
    [NOI2017]游戏「2-SAT」
    空间宝石「最短路+线段树」
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/7871069.html
Copyright © 2011-2022 走看看