CF 439D Devu and his Brother

来源:互联网 发布:局域网ip mac扫描软件 编辑:程序博客网 时间:2024/05/16 12:30

可贪心 可三分

三分要比贪心运行时间短一些

贪心要保证 b_arry 的逆序排列对应的 a_arry 的正序排列的每个数都要小

#include <iostream>#include <algorithm>#include <cstdlib>using namespace std;const int maxn = 1e5 + 100;int a[maxn];int b[maxn];int n,m;int main(){    while(cin>>n>>m)    {        for(int i = 0;i < n;i ++)        cin>>a[i];        for(int i = 0;i < m;i ++)        cin>>b[i];        sort(a,a+n);        sort(b,b+m,greater<int>());        n = min(n,m);        long long ans = 0;        for(int i = 0;i < n;i ++)        {            if(b[i] > a[i])            ans += (long long)b[i]-a[i];        }        cout<<ans<<endl;    }    return 0;}

最近假期培训刚刚学过三分

也是练习练习

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int maxn = 1e5 + 100;typedef long long LL;LL a_data[maxn];LL b_data[maxn];int n,m;LL cal(LL x){    LL ret = 0;    for(int i = 0;i < n;i ++)    if(x > a_data[i])    ret += (x-a_data[i]);    for(int i = 0;i < m;i ++)    if(x < b_data[i])    ret += (b_data[i]-x);    return ret;}int main(){    while(~scanf("%d %d",&n,&m))    {        LL a_min = 1000000000,b_max = 0;        for(int i = 0;i < n;i ++)        {            scanf("%I64d",&a_data[i]);            a_min = min(a_min,a_data[i]);        }        for(int i = 0;i < m;i ++)        {            scanf("%I64d",&b_data[i]);            b_max = max(b_max,b_data[i]);        }        if(a_min >= b_max)        {            puts("0");            continue ;        }        LL ans = 1000000000;        LL l = a_min,r = b_max;        ans = min(cal(l),cal(r));        while(l < r)        {            LL mid = (l+r)/2;            LL midmid = (mid+r)/2;            LL tmp1 = cal(mid),tmp2 = cal(midmid);            if(tmp1 > tmp2)               l = mid;            else               r = midmid;            ans = min(ans,min(tmp1,tmp2));        }        printf("%I64d\n",ans);    }    return 0;}


 

0 0
原创粉丝点击