【BZOJ 1115】[POI2009]石子游戏Kam 阶梯nim游戏

236 篇文章 0 订阅
5 篇文章 0 订阅

阶梯nim游戏:在阶梯上每一个阶梯上都是有石子,每一个人轮流选择一个阶梯将上面的任意个石子推向下一级阶梯。

解法:只考虑奇数阶梯上面的石子,每一次将奇数上面的石子推向偶数级阶梯,就相当于在奇数级阶梯上取走任意个石子,询问是否有必胜状态就相当于只在奇数阶梯上做nim游戏。

而至于偶数上面的石子可以这么考虑,如果对手将一些偶数上面的石子推到了奇数上面来,这一轮自己同样可以将那些被推到奇数级上的阶梯再一次推到偶数级上知道推到0级阶梯游戏结束,所以不用考虑偶数上面的石子,直接在奇数级上做nim游戏就好了


然后对于这一道题的话,将原数组差分,每取走一些石子相当于将ai的石子推到ai+1,直接做就好了

#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 100021
using namespace std;
int T,n,a[maxn],ans;

int main(){
	scanf("%d",&T);
	while(T--){
		ans=0;int last=0;
		scanf("%d",&n);
		for(int x,i=1;i<=n;i++){
			scanf("%d",&x);
			a[n-i+1]=x-last;
			last=x;
		}
		for(int i=1;i<=n;i++)
			if(i&1)ans^=a[i];
		if(ans)puts("TAK");
		else puts("NIE");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值