HDU 3389

题意略。

思路:这个题目是一个阶梯博弈。其实像这种阶梯博弈,威佐夫博弈,巴什博弈,nim博弈,斐波那契博弈,都是要构造一个模型。

对于特定的模型,都有一个固定的策略。

对于这个题目,我们可以发现1,2,7,8,13,14.....是一个体系。3,6,9,12,15.....是一个体系。4,5,10,11,16,17.....是一个体系。

也就是说这一个大游戏可以分成3个小游戏,最终我们只需要把这3个游戏的sg值做异或和就可以了。

其实这3个小游戏是一样的,我们挑任意一个小游戏来说:

我们将这个小游戏的盒子下标重新编号,编成1,2,3,4,5.....。其实我们可以发现,如果偶数位上数字的xor和为0,那么先手必败。

 

详见代码:

#include<bits/stdc++.h>
using namespace std;

int T,n,temp;

int main(){
    scanf("%d",&T);
    int cas = 1;
    while(T--){
        scanf("%d",&n);
        int x1 = 0,x2 = 0,x3 = 0;
        for(int i = 1;i <= n;++i){
            scanf("%d",&temp);
            if(i % 6 == 2) x1 ^= temp;
            else if(i % 6 == 5) x2 ^= temp;
            else if(i % 6 == 0) x3 ^= temp;
        }
        printf("Case %d: %s\n",cas++,(x1 ^ x2 ^ x3) ? "Alice" : "Bob");
    }
    return 0;
} 

 

posted @ 2018-08-01 10:37  温和的提比略  阅读(89)  评论(0编辑  收藏  举报