bzoj 1115 转换+阶梯博弈

思路:我打了半天的表找规律。。。。  我们将每两个数的差值看成一堆堆石子,那么题目实际上就变为了

从当前堆可以拿出一些石子放到下一堆里去,就变成了一个阶梯博弈。。。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int,int>
#define piii pair<int, pair<int,int> >

using namespace std;

const int N = 1000 + 10;
const int M = 10 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-6;

int n, a[N], b[N];
int main() {
    int T; scanf("%d", &T);
    while (T--) {
        scanf("%d", &n);
        int ans = 0;

        for (int i = 1; i <= n; ++i) {
            scanf("%d", &a[i]);
        }
        for (int i = n; i >= 1; --i) {
            b[n - i + 1] = a[i] - a[i - 1];
        }
        for (int i = 1; i <= n; ++i) {
            if (i % 2) ans ^= b[i];
        }

        if (!ans) {
            puts("NIE");
        } else {
            puts("TAK");
        }
    }
    return 0;
}
/*
*/

猜你喜欢

转载自www.cnblogs.com/CJLHY/p/9184939.html