[YDOI R1] Running 题解

subtask 1

一个超市,最大速度就是 ai2\dfrac{a_i}{2}。当然,如果 2ai2∤a_i,输出 -1 即可。

subtask 2

枚举速度,输出符合要求的最大答案即可。时间复杂度 O(A×n)O(\text A\times n),其中 A\text A 表示 aia_i 的值域。

subtask 3

方法二中,有许多速度是明显无效的,因为他们可能连到达 a1a_1 的时间都不是。所以速度枚举变为枚举 a1a_1 的因数,时间复杂度 O(d(A)×n)O(nA)O(d(A)\times n)\approx O(n\sqrt{\text A}),其中 d(n)d(n) 表示因数个数。

subtask 4

要保证到达超市的时间为整数,且最大,可以推出 v=gcd{a1,a2,a3,,an}v=\gcd\{a_1,a_2,a_3,\cdots,a_n\}

如果还要保证时间为偶数,则 vv 要再乘上 12\dfrac{1}{2}。当然,如果 2v2∤v,输出 -1 即可。

时间复杂度 O(nlogA)O(n\log \text A)

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
	int n,x,ans;
	cin>>n>>ans;n--;
	while(n--) cin>>x,ans=__gcd(ans,x);
	if(ans%2) cout<<-1;
	else cout<<ans/2;
	return 0;
}
posted @ 2024-02-25 14:23  sLMxf  阅读(29)  评论(0)    收藏  举报  来源