P3480 [POI2009]KAM-Pebbles 阶梯NIM
$ \color{#0066ff}{ 题目描述 }$
有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。
\(\color{#0066ff}{输入格式}\)
多组输入,第一行一个整数u代表数据组数(1<=u<=10)
接下来共2*u行,每两行代表一组数据:
第一行只有一个整数n(1<=n<=1000),表示石子堆数;
第二行有n个整数用空格隔开,第i个整数ai表示第i堆的石子个数,保证a1<=a2<=a3...<=an。
对于每组数据,保证石子总数不超过10000。
\(\color{#0066ff}{输出格式}\)
输出u行,如果第i组数据先手必胜,输出“TAK”,否则输出“NIE”。
\(\color{#0066ff}{输入样例}\)
2
2
2 2
3
1 2 4
\(\color{#0066ff}{输出样例}\)
NIE
TAK
\(\color{#0066ff}{数据范围与提示}\)
none
\(\color{#0066ff}{题解}\)
考虑每一堆石子能拿多少,就是\(a[i]-a[i-1]\),差分数组
如果在i堆拿了x个石子,那么相当于i堆可拿石子数-x,i+1堆可拿石子数+x
也就是说从i堆向i+1堆拿了x个石子,这是反着的阶梯NIM!!!
#include<bits/stdc++.h>
#define LL long long
LL in() {
char ch; LL x = 0, f = 1;
while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));
return x * f;
}
int a[1005050];
int main() {
for(int T = in(); T --> 0;) {
int n = in();
int ans = 0;
for(int i = 1; i <= n; i++) a[i] = in();
for(int i = n; i >= 1; i--) a[i] -= a[i - 1];
//注意要反着求
for(int i = n; i >= 1; i -= 2) ans ^= a[i];
printf(ans? "TAK\n" : "NIE\n");
}
return 0;
}
P3480 [POI2009]KAM-Pebbles 阶梯NIM的更多相关文章
- BZOJ1115[POI2009]石子游戏——阶梯Nim游戏
题目描述 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必 ...
- BZOJ 1115: [POI2009]石子游戏Kam [阶梯NIM]
传送门 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数.两人轮流操作每次操作可以从一堆石子中移走任意多石子,但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏.问先手是否必胜 ...
- [BZOJ 1115] [POI2009] 石子游戏Kam 【阶梯博弈】
题目链接:BZOJ - 1115 题目分析 首先看一下阶梯博弈: 阶梯博弈是指:初始有 n 堆石子,每次可以从任意的第 i 堆拿若干石子放到第 i - 1 堆.最终不能操作的人失败. 解法:将奇数位的 ...
- luoguP3480 [POI2009]KAM-Pebbles 阶梯Nim
将序列差分并翻转之后,变成了阶梯\(Nim\)的模板题 QAQ #include <cstdio> #include <cstring> #include <iostre ...
- P3480 [POI2009]KAM-Pebbles
P3480 [POI2009]KAM-Pebbles比如第一个样例 原:0 2 2差: 2 0 0如果把中间的2拿掉一个,就会变成原:0 1 2差: 1 1 0就可以把差看成阶梯nim细节:最终要移到 ...
- POJ 1704 Georgia and Bob [阶梯Nim]
题意: 每次可以向左移动一个棋子任意步,不能跨过棋子 很巧妙的转化,把棋子间的空隙看成石子堆 然后裸阶梯Nim #include <iostream> #include <cstdi ...
- 阶梯Nim问题
问题形式 有\(n\)个位置\(1...n\),每个位置上有\(a_i\)个石子.有两个人轮流操作.操作步骤是:挑选\(1...n\)中任一一个存在石子的位置\(i\),将至少1个石子移动至\(i-1 ...
- Georgia and Bob POJ - 1704 阶梯Nim
$ \color{#0066ff}{ 题目描述 }$ Georgia and Bob decide to play a self-invented game. They draw a row of g ...
- bzoj1115&&POJ1704&&HDU4315——阶梯Nim
BZOJ1115 题意:阶梯Nim游戏大意:每个阶梯上有一堆石子,两个人在阶梯上玩推石子游戏.每人可以将某堆的任意多石子向左推一阶,所有的石子都推到阶梯下了即算成功,即不能推的输. 分析:根据阶梯Ni ...
随机推荐
- krpano之鼠标样式修改
引入cursors.js. cursors.js代码: <krpano > <events onxmlcomplete="action(qtvrcursor);" ...
- 动态规划——最长不下降子序列(LIS)
最长不降子序列是这样一个问题: 下面介绍动态规划的做法. 令 dp[i] 表示以 A[i] 结尾的最长不下降序列长度.这样对 A[i] 来说就会有两种可能: 如果存在 A[i] 之前的元素 A[j] ...
- Spring Cloud Zuul 2(基于配置中心的动态API网关)
在大体了解了API Zuul 和 配置中心Config后我们来尝试完成一个基于配置中心的动态API网关 创建项目 命名为api-gateway-dynamic-route并加入config 和 Zuu ...
- saltstack系列(五)——zmq扩展(一)
问题 假设我们的一个客户端既有pull又有sub,他们两个都需要接收消息,该如何协调呢,毕竟,当一个socket要收消息的时候,函数recv是阻塞的,所以,我们第一个思路是不让它阻塞? 实例代码: # ...
- Mysql 设置外部访问
mysql> use mysql; mysql> GRANT ALL ON *.* TO user@' WITH GRANT OPTION; mysql -h172. -uuser -p1 ...
- Ubuntu14.04下安装glog
下载原始代码编译 1. Clone Source Code glog git clone https://github.com/google/glog 2. Install dependencies ...
- C# DateTime.ToString()的各种日期格式
DateTime.ToString()的各种日期格式 例: ToString:2016/9/27 0:00:00 ToString("yyyy/MM/dd"):2016/09/27 ...
- ios7适配--隐藏status bar
//viewDidload if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { // iOS 7 ...
- LibreOJ 6004 圆桌聚餐 (最大流)
题解:天啊,这道最大流真是水的一批……只需要每张桌子向每个单位建一条容量为1的边,源点向桌子建边,容量为桌子能坐的人数;单位向汇点建边,容量为单位人数即可,然后根据单位与桌子的连边值是否为一来了解每个 ...
- 匿名函数和lamda表达式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...