3 条题解

  • 0
    @ 2024-10-19 15:35:31

    血与泪。

    //t4 interval rp++
    #include<bits/stdc++.h>
    //#define Freopen
    using namespace std;
    
    const int N=1e6+10;
    int ans,n,t,a[N];
    int gcd,s[N];
    
    int GCD(int x,int y)
    {
    	if(y!=0&&x%y==0)return y;
    	return GCD(y,x%y);
    }
    
    int main()
    {
        #ifdef Freopen
    	freopen("interval.in","r",stdin);
    	freopen("interval.out","w",stdout);
        #endif
        
    	scanf("%d",&t);
    	while(t--)
    	{
    		memset(s,0,sizeof(s));
    		bool fg=0,flg=1;
    		ans=0;
    		
    		scanf("%d",&n);
    		for(int i=1;i<=n;++i)
    		{
    			scanf("%d",&a[i]);
    			s[i]=a[i]-a[i-1];
    			if(s[i]==0&&i>1)fg=1;//wa1
    		}
    		for(int i=3;i<=n;++i)//wa2
    		{
    			if(s[i]!=s[2])
    			{
    				flg=0;
    			}
    		}
    		if(flg||n<=2)//wa3
    		{
    			printf("0\n");
    			continue;
    		}
    		else if(fg)
    		{
    			printf("-1\n");
    			continue;
    	    }
    	    
    		gcd=s[2];//wa4
    		for(int i=3;i<=n;++i)
    		{
    			gcd=GCD(gcd,s[i]);
    		}
    		for(int i=2;i<=n;++i)
    		{
    			ans+=max(0,(s[i])/gcd-1);
    		}
    		printf("%d\n",ans);
    		end:;
    	}
    	return 0;
    }
    

    信息

    ID
    2867
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    129
    已通过
    25
    上传者