题目大意:
题目分析
-
读题的时候首先想到了差分,后来发现是一道思维题,
Si=Ai-Ai-1
,如果满足等差数列,假设所给的n项之间间隔分别为S1,S2...Sk
,设公差为d,则满足Si=ki*d
,如果Si=kd
,那么ai-1后面要添加的数为k,例如2,8 8-2=6=3*2,则2后面需要添加4,6,8三项构成等差。 -
所以等差d为差分数组的gcd
AC代码
#include<bits/stdc++.h>
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e5+10;
int a[N];
int s[N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+1+n);
for(int i=1;i+1<=n;i++) s[i]=a[i+1]-a[i];
int p=s[1];
int res=1;
if(!p){
res=n;
}
else{
for(int i=2;i<=n-1;i++) p=(__gcd(p,s[i]));
for(int i=1;i<=n-1;i++)
res=res+s[i]/p;
}
cout<<res<<endl;
return 0;
}