题目:给你两个数组a,b,经过+1、-1操作使得a数组中的最小值等于b数组中的最大值,求最小操作数
分析:先把两个数组里的数存到同一个数组里,然后升序排序,这样我们就得到了一条线性的数列,那么既然是n+m个数里前m个要比后n个小,也就很自然的能找到平衡点为数列当中的第m或者第m+1个数了。【傻逼地忘记c数组应该是a,b数组的大小的两倍了= =】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define maxn 1000005
#define ll __int64
ll a[maxn],b[maxn],comb[maxn];
ll Max(ll x,ll y)
{
if(x<y) return y;
else return x;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int i;
for(i=0;i<n;i++) scanf("%I64d",&a[i]),comb[i]=a[i];
for(i=0;i<m;i++) scanf("%I64d",&b[i]),comb[i+n]=b[i];
sort(comb,comb+n+m);
//for(i=0;i<n+m;i++) cout<<comb[i]<<" ";
//cout<<endl;
ll sum=0LL;
ll tmp=comb[m];
for(i=0;i<n;i++) sum+=Max(0,tmp-a[i]);
for(i=0;i<m;i++) sum+=Max(0,b[i]-tmp);
printf("%I64d\n",sum);
}
return 0;
}