码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1115 [POI2009]石子游戏Kam(阶梯博弈)

时间:2017-04-16 16:23:52      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:lan   div   put   没有   main   ret   style   log   题目   

 

【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1115

 

【题目大意】

  有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。
  两人轮流操作每次操作可以从一堆石子中移走任意多石子,
  但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。

 

【题解】

  我们定义最后一堆以及下标与其相差为偶数的堆为偶堆石子,其余的为奇堆石子,
  我们发现不管奇堆石子做什么操作,只要在偶堆石子中做相应的操作就可以抵消,
  因此决定这个游戏胜负的是奇堆石子和后一个偶堆石子之间的差值,
  其差值序列等同于NIM游戏,因此求出其sg值即可。

 

【代码】

#include <cstdio>
using namespace std;
const int N=1010;
int n,a[N],T;
int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        int sg=0;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        for(int i=n;i;i--)if(!((n-i)&1))sg^=(a[i]-a[i-1]);
        puts(sg?"TAK":"NIE");
    }return 0;
}

BZOJ 1115 [POI2009]石子游戏Kam(阶梯博弈)

标签:lan   div   put   没有   main   ret   style   log   题目   

原文地址:http://www.cnblogs.com/forever97/p/bzoj1115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!