您的位置:首页 > 大数据 > 人工智能

POJ 1704 Georgia and Bob (博弈:Staircase Nim)

2012-09-13 15:50 375 查看
//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
;

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
-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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: