题解

给你两个数组,每次可以选择一个数组中的一个元素加一,问你多少次操作之后能使得数组中的最大值小于数组中的最小值呢。

题解

首先我们找出中的最大值,然后直接对数组进行从小到大排序,我们只需要每次让数组中比中最大值小的数变为和中最大值相等即可,其操作步骤就是两个值之差,当遇到中的值大于等于最大值时我们就退出。

复杂度

时间复杂度

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N];
int b[N];
int main()
{
    int n,m;
    int maxn=0;
    scanf("%d%d",&n,&m);
    for(int i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
        maxn=max(maxn,a[i]);
    }
    for(int i=0; i<m; i++)
        scanf("%d",&b[i]);
    sort(b,b+m);
    long long ans=0;
    for(int i=0; i<m; i++)
    {
        if(b[i]>maxn)
            break;
        ans+=maxn-b[i];
    }
    printf("%lld\n",ans);
    return 0;
}