链接:
https://www.nowcoder.com/acm/contest/113/B
来源:牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
给长度为n的序列A,长度为m的序列B。可以给A序列里每个元素加上x且B序列里每个元素减去x (x可以是负数),问
的最小值
![](https://i-blog.csdnimg.cn/blog_migrate/d30ba555bf10d8a2cbab52903c136be2.png)
输入描述:
第一行两个整数分别表示n,m 接下来一行n个整数表示序列A 接下来一行m个整数表示序列B
输出描述:
输出一个整数表示答案
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+7;
int n,m,a[maxn],b[maxn];
ll f(int x)
{
ll ans=abs(x);
for(int i=0;i<n;i++)
ans+=abs(a[i]+x);
for(int i=0;i<m;i++)
ans+=abs(b[i]-x);
return ans;
}
ll sanfen(int l,int r)
{
ll res=1e18;
int T=100;
while(T--)
{
int mid=(l+r)/2;
int mmid=(mid+r)/2;
ll x1=f(mid),x2=f(mmid);
res=min(res,min(x1,x2));
if(x2>=x1)r=mmid;
else l=mid;
}
return res;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
printf("%lld\n",sanfen(-1e9+5,1e9+5));
return 0;
}