洛谷 [P3480] KAM-Pebbles

博弈论转化

本题的限制条件很多,我们尝试转化,
我们发现,定义 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;
}
posted @ 2018-03-05 11:32  Mr_Wolfram  阅读(130)  评论(0编辑  收藏  举报