3 条题解
-
0
容易想到,最终的间隔越大越好。
可以想到二分来搜索最大的间隔长度,发现不太行,没有但单调性。可以使用 进行计算。
代码如下:
#include <iostream> #include <algorithm> using namespace std; typedef long long ll; ll t; ll n; ll a[1000005]; int main() { // freopen("interval.in","r",stdin); // freopen("interval.out","w",stdout); cin>>t; while(t--) { cin>>n; for(ll i=1;i<=n;i++) { cin>>a[i]; } ll d=a[2]-a[1]; for(ll i=3;i<=n;i++) { if(a[i]==a[i-1]){ d=0; break; } d=__gcd(d,a[i]-a[i-1]); } // cout<<d<<":"; if(d==0) { bool flag=false; for(ll i=2;i<=n;i++) { if(a[i]-a[i-1]!=0){ flag=true; break; } } if(flag){ cout<<-1<<endl; }else{ cout<<0<<endl; } continue; } ll ans=0; for(ll i=2;i<=n;i++){ ll tmp=a[i]-a[i-1]; ans+=tmp/d-1; } cout<<ans<<endl; } return 0; }
信息
- ID
- 2867
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 129
- 已通过
- 25
- 上传者