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;
}