zoukankan      html  css  js  c++  java
  • POJ1704 Georgia and Bob 题解 阶梯博弈

    题目链接:http://poj.org/problem?id=1704

    解题思路:

    将两个相邻石子看成一组,每一组中前一个和后一个的距离等效成NIM博弈中石子个数(相邻两组之间距离无影响),这样就实现了到NIM博弈的转化,之后可以用NIM的异或规则进行博弈,需要注意的是石子不一定是偶数堆,如果是奇数堆则直接将第一组设为最左边一个元素,同时设其NIM值为其可移动范围即可。

    示例代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int maxn = 1010;
    int T, n, a[maxn], s;
    int main() {
        scanf("%d", &T);
        while (T --) {
            scanf("%d", &n);
            for (int i = 0; i < n; i ++) scanf("%d", a+i);
            sort(a, a+n);
            s = (n % 2) ? a[0] - 1 : 0;
            for (int i = n%2; i < n; i += 2)
                s ^= a[i+1] - a[i] - 1;
            puts(s ? "Georgia will win" : "Bob will win");
        }
        return 0;
    }
    

    参考资料:

  • 相关阅读:
    本周学习进度条2
    web—图表表示数据库中的数据
    Intern Day36
    计算机网络
    面试
    C++
    计算机网络
    腾讯PC客户端开发暑期实习一面
    TCP和UDP
    Intern Day34
  • 原文地址:https://www.cnblogs.com/quanjun/p/14079460.html
Copyright © 2011-2022 走看看