LG_P10183 [YDOI R1] Running 题解

首先感谢 @jjh20100730 dalao 提供的思路。

这是一道一道简单的数学题。

首先不难发现,起始时间为 \(0\),那么到达每一个超市时的时间必须要能被 \(v\) 整除,注意到题目要求最大,所以是要求 \(a_i\) 的最大公因数。

注意到到达每个超市的时间必须要是偶数,这样的话不满足 \(v\) 是最大公因数的条件,因为如果到达每个商店都是偶数的话,每个 \(a_i\) 都是可以被 \(2\) 整除的,那么这时的最大公因数是 \(2v\),故不满足条件。

继续看条件,注意到把 \(v\) 除以二后,到达每个超市的时间都会 \(\times 2\),满足了偶数时间的条件。但是在 \(v\) 是奇数的情况下,由于 \(v\) 不能被 \(2\) 整除,所以是无解的,所以要在 \(v \bmod 2 = 1\) 的情况下输出 \(-1\)

让我们来看代码吧!

#include <bits/stdc++.h>
using namespace std;

long long a[(int)(2e6 + 5)];
int main(){
    int n;
    cin >> n;
    
    long long v;
    for (int i = 0; i < n; i ++){
        cin >> a[i];
        if (i == 0) v = a[0];
        else{
            v = __gcd(v, a[i]);
        }
    }
    
    if (v % 2 == 1) cout << -1;
    else cout << v / 2;
    return 0; // 撒花!
}

希望审核大大可以通过。

posted @ 2024-04-06 08:58  lym12_ovo  阅读(25)  评论(1编辑  收藏  举报