3 条题解

  • 0
    @ 2024-10-19 15:00:55

    容易想到,最终的间隔越大越好。

    可以想到二分来搜索最大的间隔长度,发现不太行,没有但单调性。可以使用 gcd\gcd 进行计算。

    代码如下:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    ll t;
    ll n;
    ll a[1000005];
    int main() {
    //	freopen("interval.in","r",stdin);
    //	freopen("interval.out","w",stdout);
    	cin>>t;
    	while(t--) {
    		cin>>n;
    		for(ll i=1;i<=n;i++) {
    			cin>>a[i];
    		}
    		ll d=a[2]-a[1];
    		for(ll i=3;i<=n;i++) {
    			if(a[i]==a[i-1]){
    				d=0;
    				break;
    			}
    			d=__gcd(d,a[i]-a[i-1]);
    		}
    		//        cout<<d<<":";
    		if(d==0) {
    			bool flag=false;
    			for(ll i=2;i<=n;i++) {
    				if(a[i]-a[i-1]!=0){
    					flag=true;
    					break;
    				}
    			}
    			if(flag){
    				cout<<-1<<endl;
    			}else{
    				cout<<0<<endl;
    			}
    			continue;
    		}
    		ll ans=0;
    		for(ll i=2;i<=n;i++){
    			ll tmp=a[i]-a[i-1];
    			ans+=tmp/d-1;
    		}
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    

    信息

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