zoukankan      html  css  js  c++  java
  • POJ1704 Georgia and Bob 博弈论 尼姆博弈 阶梯博弈

    http://poj.org/problem?id=1704

    我并不知道阶梯博弈是什么玩意儿,但是这道题的所有题解博客都写了这个标签,所以我也写了,百度了一下,大概是一种和这道题类似的能转换为尼姆博弈的博弈。

    解法大概是配对之后的尼姆博弈,没看到一个格子只能放一个石头(以为可以直接把石头移动到前一个石头在的格子),所以莫名其妙wa了orz,总是因为题目被踩爆orz

    其实博弈也是个很神奇的东西,现在这个东西给我的印象又变成配对找规律了(泪),虽然看上去从后往前两两配对的做法很有道理但是迫切需要更数学的解释(这个东西似乎更数学的解释看不懂orz)

    嗯做法就是从后往前两两配对(奇数个就把第一个和位置0配对),然后显然(完全不)当每对的前一个移动时,后一个也一定可以移动同样步数,后一个移动时对前一个并没有什么影响,所以把每一对的两个的位置差异或起来就好了(不要直接减…要明白,每一对里后一个能移动的步数最多为两个的位置差-1)。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<iostream>
     6 #include<map>
     7 using namespace std;
     8 const int maxn=1010;
     9 int T,n;
    10 int a[maxn]={};
    11 int main(){
    12     scanf("%d",&T);
    13     while(T-->0){
    14         scanf("%d",&n);
    15         int y=0;
    16         for(int i=1;i<=n;i++){
    17             scanf("%d",&a[i]);
    18         }sort(a+1,a+1+n);
    19         if(n&1){
    20             for(int i=1;i<=n;i+=2){
    21                 y^=a[i]-a[i-1]-1;
    22             }
    23         }
    24         else{
    25             for(int i=2;i<=n;i+=2){
    26                 y^=a[i]-a[i-1]-1;
    27             }
    28         }
    29         if(y)printf("Georgia will win
    ");
    30         else printf("Bob will win
    ");
    31     }
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    Light oj 1082 Array Queries(区间最小值)
    Codeforces Round #179 (Div. 2)A、B、C、D
    poj 1976 A Mini Locomotive(01背包)
    Codeforces Round #178 (Div. 2)
    hackerrank challenges median
    poj 1961 Period(kmp最短循环节)
    poj 2182 Lost Cows(树状数组)
    ZOJ1117 POJ1521 HDU1053 Huffman编码
    poj 2352 Stars 树状数组
    这可能是最适合萌新入门Web安全的路线规划
  • 原文地址:https://www.cnblogs.com/137shoebills/p/8145515.html
Copyright © 2011-2022 走看看