这题可以完全转化为台阶博弈.就看你会不会转化了.//下面讲讲怎么转化,不会台阶博弈的,就...
我们可以把我们可以两个棋子之间中的空隙看成台阶的石子数,向左移看成石子往下传递石子.然后就是台阶博弈了?
下面讲讲台阶博弈怎么做?
台阶博弈是这样的:
现在,有一个n级台阶的楼梯,每级台阶上都有若干个石子,其中第ii级台阶上有ai个石子(i≥1)。 两位玩家轮流操作,每次操作可以从任意一级台阶上拿若干个石子放到下一级台阶中(不能不拿)。 已经拿到地面上的石子不能再拿,最后无法进行操作的人视为失败。
这个怎么做呢..nim博弈就不解释了ε唉~做法就是奇数堆异或为0就胜.
代码如下:
#include <bits/stdc++.h> using namespace std; const int N=1005; int a[N]; int main() { int T; cin>>T; while(T--) { int n; cin>>n; int ans=0; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+1+n); for(int i=n;i>0;i-=2) { ans^=(a[i]-a[i-1]-1); } if(ans) puts("Georgia will win"); else puts("Bob will win"); } return 0; }