D. Split Plus K

发布时间 2023-12-28 18:22:09作者: 纯粹的

原题链接

什么时候无解?

有解计算

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a[200005]={0};
int main()
{
    ll t;
    cin>>t;
    while(t--)
    {
        ll n,k;
        cin>>n>>k;
        ll zs=0,fs=0;
        for(ll i=1;i<=n;i++)
        {
            cin>>a[i];
            a[i]-=k;
            if(a[i]>0)zs++;
            else if(a[i]<0)fs++;
        }
        if(zs&&fs||zs+fs>0&&zs+fs<n)
        {
            puts("-1");
            continue;
        }
        if(zs+fs==0)
        {
            puts("0");
            continue;
        }
        ll b=a[1];
        for(int i=2;i<=n;i++)b=__gcd(b,a[i]);
        ll ans=0;
        if(b)for(int i=1;i<=n;i++)ans+=a[i]/b-1;
        cout<<ans<<endl;
    }
    return 0;
}