每次最少分出一个,则最后每个堆的 石头数量都是1, 共有sum(a[i])堆。而分出这些石头共需要sum(a[i] - 1)次操作。对这个操作数进行奇偶判断,若为奇数则Alice胜,否则Bob必胜。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main()
{
int t, n;
scanf("%d", &t);
while (t--)
{
int sum = 0, temp;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &temp);
sum += (temp - 1);
}
if (sum & 1)
printf("Alice\n");
else
printf("Bob\n");
}
}