题意:给出n个不相同的数组成一个集合,问每次在集合中选两个不相同的数做差,差的绝对值不能出现在集合中,然后加入这个数到集合中,Alice先操作,问最后谁赢了
思路:找出最大的一个数,并且求出n个数的最大公约数,最后能添加的数就是maxn/res - n、然后判断奇偶
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int qq = 105;
int num[qq];
int gcd(int a, int b){
return b==0?a:gcd(b, a%b);
}
int main(){
int n;scanf("%d",&n);
scanf("%d",num+0);
int res = num[0];
int maxn = num[0];
for(int i=1; i<n; ++i){
scanf("%d",num+i);
maxn = max(maxn, num[i]);
res = gcd(res, num[i]);
}
res = maxn/res - n;
if(res%2==1) printf("Alice\n");
else printf("Bob\n");
return 0;
}