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