(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;
}