Codeforces-346A-Alice and Bob(更相减损术)

题意
Alice 和 Bob 在玩游戏,给你 n个数,每个数的大小为 a i a_i ,然后Alice 先走,每一步是从这n个数中选两个数 u u v v 做差 u v |u-v| ,如果这个数不存在则把 u v |u-v| 填入这个序列,否则这个人就输了。
思路:
我们先任意选两个数 u , v u,v ,一直作差,直到 u v = v u'-v'=v' ,这个过程就是用更相减损术求 u , v u,v 最大公约数的过程,所以最后最小的数字会是这 n n 个数的最大公约数,然后写写会发现最后是一个等差数列,首项为最大公约数 d d 。然后我们只需判断下一共进行了多少局就行了。

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");

}
发布了589 篇原创文章 · 获赞 31 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43408238/article/details/104130669