题目大意:
与一般的尼姆博弈不同之处在于,每一堆石子你可以进行的操作是,你可以将其分成两堆,并且两堆的个数可以不同。
这边求出SG函数,然后异或判断是奇异局势就可以了。
这边因为范围比较大,所以SG函数的求法是推出来的。多写几组就可以了。
最近刚开始研究SG函数,所以这题也是看别人的题解,说不上怎么推出SG函数的公式,更多的解释,大家可以去看大神的解释。
这边
SG(4k)=4k-1;
SG(4k+1)=4k+1;
SG(4k+2)=4k+2;
SG(4k+3)=4k+4;
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
int t;
cin >> t;
while (t--)
{
scanf("%d", &n);
int x, ans = 0;
for (int i = 0; i < n; i++)
{
scanf("%d", &x);
if (x % 4 == 0)
ans ^= (x - 1);
else
if (x % 4 == 1 || x % 4 == 2)
ans ^= x;
else
ans ^= (x + 1);
}
if (ans == 0)
puts("Bob");
else
puts("Alice");
}
}