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; }