BZOJ 1115 [POI2009]石子游戏Kam(阶梯博弈)
2024-10-18 18:05:13
【题目链接】 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;
}
最新文章
- <;<;<; Tomcat 部署项目There are no resources that can be added or removed from the server
- 高并发应用场景下的负载均衡与故障转移实践,AgileEAS.NET SOA 负载均衡介绍与实践
- 64位Windows2008下插入Oracle中文乱码问题解决
- 使用中国版 Office 365 -- Team Site分享
- ES6新特性:let和const的使用
- 51nod1346 递归
- C++中的仿函数,std::function和bind()的用法
- Java cookie的使用
- 让大蛇(Python)帮你找工作 之增强版
- 【转】AFNetworking之于https认证
- 浙大pat1050题解
- Hibernate最简单教程
- PyCharm中Directory与Python package的区别
- 201521123077 《Java程序设计》第13周学习总结
- Kill 进程
- Linux文件系统的介绍
- Python测试模块doctest
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据
- GBDT 详解分析 转+整理
- Linux net core docker hello world 简单使用