标签:style blog color for sp div c log 代码
题意:
N个棋子,位置分别是p[1]...p[N]。
Georgia和Bob轮流,每人每次可选择其中一个棋子向左移动若干个位置(不能超过前一个棋子,不能超出最左边【位置1】且不能不移)
Georgia先手,问谁赢。
思路:
将棋子按位置从右到左两个两个作为一对。若棋子总个数是奇数,将第一个棋子和【位置0】作为一对。(可想象位置0放了一个棋子)。
情况一:先手若移动某对棋子中的第一个棋子K位,则后手可将该对棋子中的第二个棋子也移动K位。即这种情况不对结果产生影响。
情况二:先手若移动某对棋子中的第二个棋子。可将每对棋子两个棋子之间的距离看成一堆石头的个数。则此题和取石子一模一样!
OK,直接看代码..
代码:
int T,n; int p[1005], a[1005]; int main(){ cin>>T; while(T--){ scanf("%d",&n); rep(i,1,n) scanf("%d",&p[i]); sort(p+1,p+1+n); p[0]=0; int num=0; for(int i=n;i>0;i-=2){ a[++num]=p[i]-p[i-1]-1; } int ans=a[1]; rep(i,2,num){ ans=ans^a[i]; } if(ans) puts("Georgia will win"); else puts("Bob will win"); } }
poj 1704 Georgia and Bob (nim)
标签:style blog color for sp div c log 代码
原文地址:http://www.cnblogs.com/fish7/p/4004378.html