POJ 1704 Georgia and Bob(阶梯博弈+证明)
Posted ATM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1704 Georgia and Bob(阶梯博弈+证明)相关的知识,希望对你有一定的参考价值。
关于阶梯博弈有如下定理:
将所有奇数阶梯看作n堆石头,做Nim,将石头从奇数堆移动到偶数堆看作取走石头,同样地,异或值不为0(利己态)时,先手必胜。
以下是POJ 1704的AC代码:
//棋子只能往左走(最左有界线),可以走任意多格(>=1) //而且棋子不能越过在它前面的棋子(它左边的棋子) //每个格最多放一个棋子,说明棋子也不能走到另一个棋子所在的位置 //转换成nim:把输入的位置排好序,算相邻两点的间距,该间距就是最多能走的步数k,看作一堆里的k个石子 //然后从最大的位置(因为最右)开始遍历,计算奇数堆的nim异或值 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int t; scanf("%d",&t); while(t--) { int sum=0,n,a[1005],b[1005]; scanf("%d",&n); a[0]=0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a,a+n+1); for(int i=1;i<=n;i++) b[i]=a[i]-a[i-1]-1; int cnt=0; for(int i=n;i>0;i--) { cnt++; if(cnt&1) sum^=b[i]; } if(sum) printf("Georgia will win\n"); else printf("Bob will win\n"); } return 0; }
以上是关于POJ 1704 Georgia and Bob(阶梯博弈+证明)的主要内容,如果未能解决你的问题,请参考以下文章
POJ 1704 Georgia and Bob(阶梯博弈+证明)
POJ 1704 Georgia and Bob(阶梯博弈)
POJ1704 Georgia and Bob(Staircase Nim)