题意
Alice 和 Bob 在玩游戏,给你 n个数,每个数的大小为
,然后Alice 先走,每一步是从这n个数中选两个数
,
做差
,如果这个数不存在则把
填入这个序列,否则这个人就输了。
思路:
我们先任意选两个数
,一直作差,直到
,这个过程就是用更相减损术求
最大公约数的过程,所以最后最小的数字会是这
个数的最大公约数,然后写写会发现最后是一个等差数列,首项为最大公约数
。然后我们只需判断下一共进行了多少局就行了。
int main(){
int n;
cin >> n;
int M = -INF;
int p = 0;
for(int i = 1;i <= n;++i){
int a;
cin >>a;
M = max(M,a);
p = __gcd(p,a);
}
M /= p;
M -= n;
if(M & 1) puts("Alice");
else puts("Bob");
}