HDU 4315 Climbing the Hill [阶梯Nim]

传送门

题意:

和上题基本一样;山顶可以有多人,谁先把king放到山顶谁就胜



并不太明白

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1005;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
    while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
    return x*f;
}

int n,k,a[N];
int main(){
    //freopen("in","r",stdin);
    while(scanf("%d%d",&n,&k)!=EOF){
        for(int i=1;i<=n;i++) a[i]=read();
        if(k==1) {puts("Alice");continue;}
        int sg=0;
        if(k!=2) a[0]=-1;
        else a[0]=0;
        for(int i=n;i>=1;i-=2) sg^= a[i]-a[i-1]-1;
        puts(sg ? "Alice" : "Bob");
    }
}
时间: 2024-11-29 07:22:03

HDU 4315 Climbing the Hill [阶梯Nim]的相关文章

HDU 4315 Climbing the Hill (尼姆博弈)

Climbing the Hill Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description Alice and Bob are playing a game called "Climbing the Hill". The game board consists of cells arranged vertically, as the

HDU 5996 dingyeye loves stone [阶梯Nim]

dingyeye喜欢和你玩石子游戏. dingyeye有一棵nn个节点的有根树,节点编号为00到n−1n−1,根为00号节点.游戏开始时,第ii个节点上有a[i]a[i]个石子.两位玩家轮流操作,每次操作玩家可以选择一个节点,并将该节点上的一些石子(个数不能为00)移动到它的父亲节点上去.如果轮到某位玩家时,该玩家没有任何合法的操作可以执行,则判负. 你在游戏中执先手,你想知道当前局面你能否必胜. 裸题... #include <iostream> #include <cstdio>

hdu4315 Climbing the Hill(阶梯博弈)

Climbing the Hill Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1218    Accepted Submission(s): 548 Problem Description Alice and Bob are playing a game called "Climbing the Hill". The g

POJ 1704 Georgia and Bob [阶梯Nim]

题意: 每次可以向左移动一个棋子任意步,不能跨过棋子 很巧妙的转化,把棋子间的空隙看成石子堆 然后裸阶梯Nim #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int N=1005; inline int re

BZOJ 1115: [POI2009]石子游戏Kam (阶梯nim)

Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1138  Solved: 697[Submit][Status][Discuss] Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. Input 第一行u表示数据组数.对于每组数据,第一行N表示石子堆数,第二行N个数ai表示第i堆石

P3480 [POI2009]KAM-Pebbles 阶梯NIM

$ \color{#0066ff}{ 题目描述 }$ 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜. \(\color{#0066ff}{输入格式}\) 多组输入,第一行一个整数u代表数据组数(1<=u<=10) 接下来共2*u行,每两行代表一组数据: 第一行只有一个整数n(1<=n<=1000),表示石子堆数: 第二行有n个整数用空格

阶梯Nim问题

问题形式 有n个位置1...n,每个位置上有ai个石子.有两个人轮流操作.操作步骤是:挑选1...n中任一一个存在石子的位置i,将至少1个石子移动至i−1位置(也就是最后所有石子都堆在在0这个位置).谁不能操作谁输.求先手必胜还是必败. 结论 问题等价于,求位置为奇数的ai的异或和,若异或和等于0,则先手必败,否则先手必胜.你可能已经注意到这非常像Nim游戏.其实这个游戏恰好等价于:将每个奇数位置的数x看成一堆有x个石子的石子堆,然后玩Nim游戏. 证明 拿走某一堆石子的一部分,相当于将某个奇位

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

http://acm.hdu.edu.cn/showproblem.php?pid=4315 题意:有n个人要往坐标为0的地方移动,他们分别有一个位置a[i],其中最靠近0的第k个人是king,移动的时候在后面的人不能越过前面的人,先把king送到0的人胜. 思路:阶梯博弈.把n个人两两配对,形成一个组,即a[i]和a[i+1]是一个组,a[i+2]和a[i+3]是一个组,把a[i]和a[i+1]的距离当成阶梯博弈中的奇数阶的值,a[i+1]和a[i+2]的距离当成偶数阶(不用考虑).首先k=1

HDU 4315(NIM游戏及其变种,组合游戏相关学习

题目:山上有n个人,每个人给出距离山顶的距离,给出其中一个人为king,每次能挑选一个人向上移动,不能越过其他人,最后将king移动到山顶者获胜.问获胜者. 思路:转化为NIM游戏. 简记: NIM游戏:有n堆石子,每次可以选择一堆拿走任意数量的石子,不能拿石子的一方失败. NIM游戏的必败态为所有堆的石子数目异或值为0的情况,那是因为,如果异或值不为0,设其为x,x的二进制表示中的最左边的一位1必然存在一堆(设为z)与之对应,将这一堆取成y=x^z,那么得到的状态为异或值为0(必败态),而必败