当前位置: 首页 > 工具软件 > A-shares > 使用案例 >

Codeforces 793A Oleg and shares 题解

方璞
2023-12-01

题意

有n个数,每次操作只可以将其中一个数减k,问最少需要多少次操作才能让所有数相等,若不可能,输出-1

思路

先找到最小的,然后把所有数减到和最小的相等,如果它们的差不能被k整除就不可能成功,否则答案就要加两数之差除以k,最后算下来就是答案

代码

#include <cstdio>
long long a[100001];
int main()
{
    long long n,k,minn,f,ans;
    scanf("%I64d%I64d",&n,&k);
    minn=1000000001;
    for(long long i=0;i<n;i++)
    {
        scanf("%I64d",&a[i]);
        if(a[i]<minn)
            minn=a[i];
    }
    ans=0;
    f=0;
    for(long long i=0;i<n;i++)
        if((a[i]-minn)%k!=0)
        {
            f=1;
            break;
        }
        else ans+=(a[i]-minn)/k;
    if(f)
        printf("-1\n");
    else printf("%I64d\n",ans);
    return 0;
}
 类似资料: