//POJ 1704 Georgia and Bob (Staircase Nim)
/*
题意:有一排的格子从左到右编号为1、2、3...,有n个石子放在上面,每个格子最多只能放一个石子
两个人轮流取石子,每次可以把取的石子往左移。
约束条件:1、不能跨越其他石子
2、不能和其他石子放在同一个格子里面
思路:转化为Staircase Nim
相邻两个石子之间的空格数就是每个石子可以移动的距离,
比如可以移动n格,就可以理解成一堆石子,个数为n。
每次往左移动一个石子m格,相当于当前石子堆个数-m,而右边那堆的石子个数+m
就可以理解成把当前堆移动m个石子到右边那堆石子中。
这样就转化为Staircase Nim,最右边的那堆石子就相当于Staircase Nim的最低层。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1005
int T,n;
int num[N];
int cmp(const void *a,const void*b){
return *(int *)a - *(int *)b;
}
int main(){
int i,j;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
num[0] = 0 ;
for(i = 1; i <= n; ++i)
scanf("%d",&num[i]);
qsort(num,n+1,sizeof(num[0]),cmp);
int ans = num[n]-num[n-1]-1;
for(i = n-2; i > 0; i -= 2)
ans ^= num[i]-num[i-1]-1;
puts(ans?"Georgia will win":"Bob will win");
}
return 0;
}
POJ 1704 Georgia and Bob (博弈:Staircase Nim)
最新推荐文章于 2017-10-02 21:28:00 发布