(1)若有相同且不全部相同 输出-1 (2)若全部相同 输出0 (3)无相同,求出所有相邻两数的差的最大公因数k,再依次看区间a[i]~a[i+1]中有多少个数是a[i]-a[i-1]的倍数,再-1 60分就是没考虑整体的最大公因数(我就是受害者) 注明:__gcd(两个下划线)可以直接用
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
int a[N],mn=2e9,cnt=0;
bool done=true;
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d",a+i);
if(i!=1&&a[i]-a[i-1]<mn) mn=a[i]-a[i-1];
if(i!=1&&a[i]!=a[i-1]) done=false;
}
if(mn==0&&done) puts("0");
else if(mn==0&&!done) puts("-1");
else{
int k=a[2]-a[1];
for(int i=2;i<n;i++) k=__gcd(k,a[i+1]-a[i]);
for(int i=2;i<=n;++i)
{
cnt+=(a[i]-a[i-1])/k-1;
}
printf("%d\n",cnt);
}
}
return 0;
}