题目

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

输入格式

第一行u表示数据组数。对于每组数据,第一行N表示石子堆数,第二行N个数ai表示第i堆石子的个数(a1<=a2<=……<=an)。 1<=u<=10 1<=n<=1000 0<=ai<=10000

输出格式

u行,若先手必胜输出TAK,否则输出NIE。

输入样例

2

2

2 2

3

1 2 4

输出样例

NIE

TAK

题解

首先我们了解一下阶梯游戏

有一个n级的阶梯,每级阶梯上有若干硬币。二人轮流操作,每次可以将某一级台阶上的若干个硬币移到下一级。无法操作者输

这是一个SG游戏,我们尝试把它转化为Nim游戏来求解

经分析可以发现这个游戏只与奇数阶有关:

①假若对手移动偶数阶,我们可以继续将其往下移动到偶数阶,直至0阶

②假若对手移动奇数阶,若移动第一阶,则相当于取走

③假若对手移动奇数阶,且将移动到偶数阶,而偶数阶的子最终将以①的方式到达0阶而不改变先后手,所以也相当于取走

至此,可以完全转化为只与奇数阶有关的Nim游戏,求奇数阶异或和,非0则必胜

本题

本题和阶梯游戏有什么关系呢?

由于石子数单调不减,每堆石子之间有个差值

当我们移走第i堆的x个石子时,i与i - 1的差值减少x,i+1与i的差值增加x,不就是阶梯游戏么?

注意:这里N与N-1的差值是第一级台阶,相当于反过来的阶梯游戏

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u]; k != -1; k = ed[k].nxt)
using namespace std;
const int maxn = 1005,maxm = 100005,INF = 1000000000;
inline int RD(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57) {out = (out << 1) + (out << 3) + c - '0'; c = getchar();}
return out * flag;
}
int A[maxn],N;
int main(){
int T = RD();
while (T--){
N = RD(); int x = 0;
REP(i,N) A[i] = RD();
for (int i = N; i > 0; i--) A[i] -= A[i - 1];
for (int i = N; i > 0; i -= 2) x ^= A[i];
if (x) puts("TAK");
else puts("NIE");
}
return 0;
}

最新文章

  1. 【hbase】——bulk load导入数据时value=\x00\x00\x00\x01问题解析
  2. js 判断IE浏览器,包含IE6/7/8/9
  3. 让 File Transfer Manager 在新版本WIndows上能用
  4. Java基础之在窗口中绘图——绘制直线和矩形(Sketcher 2 drawing lines and rectangles)
  5. Model-View-Controller - 杂谈
  6. hdu 4403 简单搜索
  7. 【转】一个FAE(AE)的体会和大家交流
  8. android事件详解
  9. JSP的include指令
  10. 浅谈 maxMemory , totalMemory , freeMemory 和 OOM 与 native Heap
  11. C#应用编程小例子-01-渐显的窗体
  12. redis数据备份与恢复
  13. opatchauto failed with error code 42 补丁目录权限问题
  14. error running git
  15. 仿B站项目(4)webpack打包第三方库jQuery
  16. 完整性约束&amp;外键变种三种关系&amp;数据的增删改
  17. JMeter 连接MySQL
  18. C语言位操作--两整数中的最大值与最小值
  19. tomcat安装配置常见问题详解
  20. kbengine + cocos2d-js-demo理解

热门文章

  1. Python学习手册之Python介绍、基本语法(二)
  2. 【Java】关于Spring MVC框架的总结
  3. 【转】已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭
  4. centos linux 因别名问题引起的麻烦及解决技巧
  5. vs编译报错 BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse)
  6. 使用testng.xml组织测试用例
  7. CSS实现自适应下保持宽高比
  8. 问题 A: 完数
  9. JavaScript - Standard built-in objects
  10. POJ 2162 Document Indexing(模拟)