玩游戏,在一条形格子中有N个棋子,他们可以选择任意棋子,往左移到不超过其它棋子和最左边的任意步数。谁不能走谁输。
思路:跟Nim很像,把两个棋子的距离看成一堆石子,因为如果你把左边的棋子移动任意步数,右边的棋子跟着移动相同步数就会抵消(例 2 3
3 等同于 2),这样就转换成Nim游戏了。
//176K
16MS
#include
#include
#include
using namespace std;
const int M = 1005;
int pos[M];
int main ()
{
i,m,n;
(~scanf ("%d",&n))
while (n --)
{
scanf ("%d",&m);
for (i = 0; i < m; i ++)
scanf ("%d",&pos[i]);
sort(pos,pos+m);
int ans = 0;
if (m&1)
{
ans = pos[0] - 1;
for (i = 2;i < m;i += 2)
ans ^= (pos[i] - pos[i-1] - 1);
}
else
{
for (i = 1;i < m;i += 2)
ans ^= (pos[i] - pos[i-1] - 1);
}
if (!ans)