D. Split Plus K

原题链接

什么时候无解?

有解计算

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

posted @   纯粹的  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示