题目地址:http://codeforces.com/problemset/problem/346/A
思路:最终无法再选择两个数,说明最后形成了一个公差为d的等差数列,即为d,d+d,d+2*d,……,d+(n-1)*d 。所以,只需求出原始数列所有数的最大公约数即可求出公差。最终数列元素个数=数列元素最大值/公差,减去n即为比赛过程中新增加的元素。由于A先开始游戏,所以如果新增加元素为奇数则A赢,否则B赢。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[150];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int gcd=a[0],maxx=a[0];
for(int i=1;i<n;i++)
{
gcd=__gcd(gcd,a[i]);
maxx=max(maxx,a[i]);
}
int step=maxx/gcd-n;
printf("%s\n",step&1?"Alice":"Bob");
return 0;
}