【题解】LightOJ-1253 Misere Nim

Misere Nim(LightOJ-1253)

题面

Alice and Bob are playing game of Misère Nim. Misère Nim is a game playing on k piles of stones, each pile containing one or more stones. The players alternate turns and in each turn a player can select one of the piles and can remove as many stones from that pile unless the pile is empty. In each turn a player must remove at least one stone from any pile. Alice starts first. The player who removes the last stone loses the game.

输入

Input starts with an integer T (≤ 200), denoting the number of test cases.

Each case starts with a line containing an integer k (1 ≤ k ≤ 100). The next line contains k space separated integers denoting the number of stones in each pile. The number of stones in a pile lies in the range [1, 109].

输出

For each case, print the case number and 'Alice' if Alice wins otherwise print 'Bob'.

样例输入

1
2
3
4
5
6
7
3
4
2 3 4 5
5
1 1 2 4 10
1
1

样例输出

1
2
3
Case 1: Bob
Case 2: Alice
Case 3: Bob

提示

思路

Anti-Nim博弈,可以参见【题解】POJ-3480 John

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using namespace std;

int main()
{
int T; scanf("%d", &T);
for(int cs=1; cs<=T; cs++)
{
int n; scanf("%d", &n);

int nim=0, anti=0;
for(int i=0; i<n; i++){
int x; scanf("%d", &x);
if(x>1) anti = 1;
nim ^=x;
}
printf("Case %d: ", cs);
if((!nim&&!anti) || (nim&&anti)){
printf("Alice\n");
}else{
printf("Bob\n");
}
}
return 0;
}