题目大意:每个测试点最多有T(1 <= T <= 20)个测试数据。如图所示,Georgia和Bob在玩一种自创的游戏。一个无限长的棋盘上有N个旗子(1 <= N <= 1000),第i个棋子的位置可以用Pi表示(1 <= Pi <= 10000)。现在Georgia先走。每个人每一次可以把一枚棋子向左移动任意个格子,但是不能超越其他棋子,也不能和其他棋子处在同一个格子里。如果轮到某一个人的时候Ta再也不能移动棋子了,就判负。现在每个测试数据给定一种情况,如果Georgia会赢,输出“Georgia will win”,如果Bob会赢,输出“Bob will win”,如果不确定,输出“Not sure”。两个人都知道获胜策略是什么,也会想方设法取得胜利。
首先明确,绝对没有Not sure。怎么会有一盘给定了的棋说不准谁会赢的?!
这个问题可以看作是一种特殊的石子游戏。以第二个样例为例:
1 5 6 7 9 12 14 17
第一个棋子不能向左移动了。第二个棋子可以向左移动3个格子。第三个棋子也不能移动了,以此类推,可以得到这样一个数列:
0 3 0 0 1 2 1 2,第n个数字代表第n个棋子可以移动的步数。
考虑一下把第二个棋子向左移动一格的情况,原数列变为:
0 2 1 0 1 2 1 2
这不就是把“第二堆”石子移了一个到右边的“第三堆”石子么?由此可以给出等价的游戏新定义:
给定N堆石子,每堆里面的石子个数都是非负的。每次可以把第i堆中的任意颗石子移动到第i + 1堆中(1 <= i < N),或者第N堆的石子扔掉任意颗。如果某人不能继续操作则判负。
代码:
#include <iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
}