Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 7243 | Accepted: 2178 |
Description
Georgia and Bob move the chessmen in turn. Every time a player will choose a chessman, and move it to the left without going over any other chessmen or across the left edge. The player can freely choose number of steps the chessman moves, with the constraint that the chessman must be moved at least ONE step and one grid can at most contains ONE single chessman. The player who cannot make a move loses the game.
Georgia always plays first since "Lady first". Suppose that Georgia and Bob both do their best in the game, i.e., if one of them knows a way to win the game, he or she will be able to carry it out.
Given the initial positions of the n chessmen, can you predict who will finally win the game?
Input
Output
Sample Input
2 3 1 2 3 8 1 5 6 7 9 12 14 17
Sample Output
Bob will win Georgia will win
这个题与hdoj的1730类似,当这个题中的N=2时,就是那个题了
N为偶数时, 第奇数的棋子不能移动,第奇数i个棋子和第i+1个就等同于hdoj1730题
N为奇数时类似。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10010
using namespace std;
int a[N];
int cmp(int k, int l)
{
return k < l;
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
memset(a, 0, sizeof(a));
int n;
scanf("%d", &n);
int res = 0;
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
sort(a + 1, a + n + 1, cmp);
if (n % 2 == 1)
{
res = res ^ (a[1] - 1);
int r;
for (int i = 2; i <= n; i++)
{
if(i % 2 == 0)
r = a[i];
else
res = res ^ (a[i] - r - 1);
}
}
else
{
int r = 0;
for (int i = 1;i <= n; i++)
{
if (i % 2 == 1)
r = a[i];
else
res = res ^ (a[i] - r - 1);
}
}
if (res == 0)
printf("Bob will win\n");
else
printf("Georgia will win\n");
}
return 0;
}