http://codeforces.com/problemset/problem/346/A
观察了一下,猜测和他们的最大公因数有关,除以最大公因数前后结果是不会变的。
那么怎么证明一定是有n轮呢?我猜就是因为现在至少有几个是互质的,所以总是可以构造出1?具体怎么证明呢?还是看看别人的思路吧……
首先最终停止的状态一定是一个等差数列,这个是毫无疑问的。设首项为d,那么肯定停止于d,2d,3d,...,n,那么很显然d就是他们的最大公因数啊……对哦?!
#include<bits/stdc++.h> using namespace std; #define ll long long int n; int a[105]; int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } int g=a[0]; for(int i=1;i<n;i++){ g=__gcd(g,a[i]); } for(int i=0;i<n;i++){ a[i]/=g; } int maxa=*max_element(a,a+n); int d=maxa-n; if(d%2) puts("Alice"); else puts("Bob"); }
原文地址:https://www.cnblogs.com/Yinku/p/10327661.html
时间: 2024-11-13 09:42:49