数学、枚举倍数
枚举 $i,j$ 并标记 $|S_i-S_j|$ 的值,一旦存在 $|S_i-S_j|=N \times K$,这个 $K$ 就不合法。枚举 $K$ 的值后对每个 $K$ 枚举倍数,最小的所有倍数都没有被标记的 $K$ 即为答案,时间复杂度 $O(n^2 + V \log V)$。
#include<bits/stdc++.h>
using namespace std;
constexpr int lim=1000000;
bool on[1000001];
int n,a[5001];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++) on[abs(a[i]-a[j])]=1;
for(int i=1;i<=lim;i++){
for(int j=i;j<=lim;j+=i) if(on[j]) goto nxt;
printf("%d\n",i);
break;
nxt:continue;
}
return 0;
}