关于凹函数

链接: https://www.nowcoder.com/acm/contest/113/B
来源:牛客网

题目描述

给长度为n的序列A,长度为m的序列B。可以给A序列里每个元素加上x且B序列里每个元素减去x (x可以是负数),问 的最小值

输入描述:

第一行两个整数分别表示n,m
接下来一行n个整数表示序列A
接下来一行m个整数表示序列B

输出描述:

输出一个整数表示答案

#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mset(a,b) memset(a,b,sizeof(a))
#define sz size()
#define cl clear()
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164
typedef long long LL;
typedef pair<int,int> pr;
const int inf = 99999999;
const double eps = 1e-8;
const int dir4[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};
const int dir8[8][2] = {{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
const int maxn = 2e5 + 10;
const int mod = 1e9 + 7;
int a[maxn], n, m, x;
int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1 ; i <= m + n ; i++) {
        scanf("%d", &x);
        if (i <= n) a[i] = x;
        else a[i] = -x;
    }
    sort(a + 1, a + n + m + 2);
    LL sum = 0;
    for (int i = 1 ; i <= n + m + 1 ; i++ )
        sum += (LL)(abs(a[i] - a[(n + m + 2) / 2]));
    printf("%lld\n", sum);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/soul_97/article/details/80466083