[POI2009]石子游戏Kam
Description
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。
Input
第一行u表示数据组数。对于每组数据,第一行N表示石子堆数,第二行N个数ai表示第i堆石子的个数(a1<=a2<=……<=an)。 1<=u<=10 1<=n<=1000 0<=ai<=10000
Output
u行,若先手必胜输出TAK,否则输出NIE。
Sample Input
2
2
2 2
3
1 2 4
Sample Output
NIE
TAK
此题显然博弈
啥?你说你不会博弈?那我就安利一下自己的博客咯--->浅谈算法——博弈论
好,我们回归正题。
这题麻烦的地方在于需要保持两堆石子之间的大小关系,但是我们稍加思考,发现本题就是要使得两堆石子间的差值要非负。
我们继续观察一下,如果说移走第i堆石子,那么就会将第i-1堆与第i堆石子的差值增大,但是会使第i堆与第i+1堆石子的差值减小,而且他们的增量的绝对值是一样的!
没错,阶梯Nim!我们只需要对这些石子堆之间的差值求一遍阶梯Nim即可。
记得注意移动的方向,奇偶性判断要注意。
/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline void print(int x){if (x>=10) print(x/10);putchar(x%10+'0');
}
int main(){for (int Data=read();Data;Data--){int n=read(),res=0,last=0;for (int i=1;i<=n;i++){int x=read();if (!((i&1)^(n&1))) res^=x-last;last=x;}printf(!res?"NIE":"TAK");putchar('\n');}return 0;
}
转载于:https://www.cnblogs.com/Wolfycz/p/9101369.html
[POI2009]石子游戏Kam相关推荐
- bzoj 1115: [POI2009]石子游戏Kam(博弈)
1115: [POI2009]石子游戏Kam Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1132 Solved: 692 [Submit][S ...
- bzoj1115: [POI2009]石子游戏Kam
[Submit][Status][Discuss] Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保 ...
- 1115: [POI2009]石子游戏Kam
Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏 ...
- BZOJ 1115: [POI2009]石子游戏Kam
Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏 ...
- 【bzoj1115】 [POI2009]石子游戏Kam
Description 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏 ...
- BZOJ1115:[POI2009]石子游戏Kam(博弈论)
挺水的 听说是阶梯nim和,就去看了一下,然后就会了= = 观察题目,发现拿第i堆棋子k个造成的影响就是第i+1堆棋子能多拿k个 可以把模型转化为,有n堆石子,每次从某一堆拿一个石子,放在下一堆中,不 ...
- 【博弈论】bzoj1115 [POI2009]石子游戏Kam
差分后与阶梯博弈很类似. #include<cstdio> using namespace std; int n,T,a[1001],ans; int main() {scanf(&quo ...
- bzoj1115:[POI2009]石子游戏Kam
传送门 阶梯nim模型 代码: #include<cstdio> #include<iostream> #include<algorithm> using name ...
- [BZOJ]1115 石子游戏Kam
1115: [POI2009]石子游戏Kam Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1061 Solved: 651 [Submit][S ...
最新文章
- lua 实现策划需要保留的小数位数
- cfa mock exam 2020下载_2019年6月CFA考试为什么一定要做MOCK?
- Oracle 11g学习笔记(四)
- Java Annotation认知(包括框架图、详细介绍、示例说明)
- linux安装中文输入法sc,Linux下安装Discuz_7.2_FULL_SC_GBK
- 华为云文字识别服务产品优势、应用场景、典型案例和未来之路(OCR系列三)
- 移动视频监控摄像机分类与优势浅析
- BIEE回写(BIEE write back)
- IDEA中如何配置Tomcat和项目?
- server2008实验之七 利用FSRM实现文件服务器精确管理.
- oracle 监听 开机启动命令,如何让oracle DB、监听和oem开机启动(dbstart)
- 写一手好字:硬笔书法轻松自学指南(知乎周刊 Plus)-读书笔记
- 教师计算机excel培训教案,信息技术教案:Excel中的函数
- 调用Windows远程桌面应用
- kdays 游戏汉化教程[日记版本] 序章 接触
- 从Ping-Pong消息学习Gossip协议
- ulimit修改open files永久生效
- 关于专利申请中发明内容和具体实施方法有什么本质区别?
- 计算机链接限制无线网络,Win7无线网络连接受限制或无连接的解决办法
- 【Java基础知识】JDBC基本操作
热门文章
- 卖出总数的一半又少8个_(完整版)第九讲还原问题(三年级奥数)
- spring mysql防注入攻击_【spring】(填坑)sql注入攻击 - 持久层参数化
- c语言指数怎么表示_Assembly 浮点表示法
- centos7 docker安装_教你如何在 CentOS 7 下 yum 方式安装 Docker 环境
- 计算机网络—SR选择重传协议
- HDU 6182 2017广西邀请赛:A Math Problem
- bzoj 1636 bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队(RMQ)
- Matlab 小波变换dwt和wavedec
- istio使用教程和示例(导流,请求路由,访问拒绝,黑白名单,限速)
- tf.one_hot()