博弈论转化
本题的限制条件很多,我们尝试转化,
我们发现,定义 c[i] 为第 i 堆可以取得数量,如果第 i 堆取出了 x ,那么 c[i] - x , c[i + 1] + x
我们发现这是一个反着的阶梯Nim,qwq
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int T, n, num[1005], c[1005];
int main() {
cin>>T;
while(T--) {
cin>>n;
for(int i = 1 ; i <= n ; i++) {
cin>>num[i];
c[i] = num[i] - num[i - 1];
}
int ans = 0;
for(int i = n ; i >=1 ; i -= 2) {
ans ^= c[i] ;
}
if(ans) printf("TAK\n");
else printf("NIE\n");
}
return 0;
}