zoukankan      html  css  js  c++  java
  • POJ 1704 Georgia and Bob(阶梯博弈+证明)

    POJ 1704 题目链接

    关于阶梯博弈有如下定理:

    将所有奇数阶梯看作n堆石头,做Nim,将石头从奇数堆移动到偶数堆看作取走石头,同样地,异或值不为0(利己态)时,先手必胜。

    定理证明看此博:http://blog.csdn.net/kk303/article/details/6692506

     

    以下是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
    ");
            else printf("Bob will win
    ");
        }
        return 0;
    }
  • 相关阅读:
    菜根谭#77
    菜根谭#76
    菜根谭#75
    菜根谭#74
    菜根谭#73
    python迭代器
    python爬取网页数据
    yii2验证规则
    python装饰器的理解
    php中多图上传采用数组差集处理(array_diff,array_map)
  • 原文地址:https://www.cnblogs.com/atmacmer/p/5244027.html
Copyright © 2011-2022 走看看