首先感谢 @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; // 撒花!
}
希望审核大大可以通过。
标签:LG,R1,int,题解,到达,long,偶数,整除,公因数 From: https://www.cnblogs.com/mayile/p/18117150/lg_p_10183