题目地址:POJ 1704
这个题实在巧妙。。居然这样就可以转化成了经典的nim模型。
这题可以从左往右两两配对,如果是奇数个的话,就让最左边的与0配对。然后每当对方移动某一对的前一个,你总可以移动该对的后一个来移动回来。所以这是没有影响的。有影响的只是每一对中间的空格数。这就转化成了((n+1)/2)堆石子的游戏,每一堆的石子个数是每一对点之间的空格数。然后用异或求解。
代码如下:
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> using namespace std; int a[2000]; int main() { int t, n, i, s, j, sum; scanf("%d",&t); while(t--) { scanf("%d",&n); a[0]=0; for(i=1;i<=n;i++) { scanf("%d",&a[i]); } sort(a+1,a+n+1); if(n&1) { s=0; } else s=1; sum=0; for(i=s;i<=n;i+=2) { sum^=a[i+1]-a[i]-1; } if(!sum) puts("Bob will win"); else puts("Georgia will win"); } return 0; }
POJ 1704 Georgia and Bob(nim博弈论)
原文地址:http://blog.csdn.net/scf0920/article/details/39298991