AcWing 1246. 等差数列
原题链接
中等
作者:
暖心男神2
,
2021-04-04 16:28:39
,
所有人可见
,
阅读 242
C++ 代码
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int N=1e6+10;
typedef long long LL;
LL a[N],b[N];
LL gcd(LL a,LL b){
if(!b) return a;
return gcd(b,a%b);
}
void insert(int l,int r,LL x){ //差分序列
b[l] +=x;b[r+1]-=x;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i = 1;i<=n;i++) insert(i,i,a[i]);
// for(int i = 1;i<=n;i++) cout<<b[i]<<' ';
LL maxgcd = b[2];
for(int i = 3;i<=n;i++){
maxgcd= gcd(maxgcd,b[i]);
if(maxgcd ==1) break;
}
if(maxgcd==0) cout<<n<<endl;
else cout<<(a[n]-a[1])/maxgcd+1<<endl;
}