2018.02.02【GDOI2018】模拟C组——最大配对
2018-02-02 20:00
387 查看
Description
给出2个序列A={a[1],a[2],…,a},B={b[1],b[2],…,b
},从A、B中各选出k个元素进行一一配对(可以不按照原来在序列中的顺序),并使得所有配对元素差的绝对值之和最大。
例如各选出了a[p[1]],a[p[2]],……,a[p[k]]与b[q[1]],b[q[2]],……,b[q[k]],其中p序列中的元素两两不相同,q序列中的元素两两不相同,那么答案为|a[p[1]]-b[q[1]]|+|a[p[2]]-b[q[2]]|+……+|a[p[k]]-b[q[k]]|,现在任务也就是最大化这个答案。
Input
输入的第1行为2个正整数n,k,表示了序列的长度和各要选出元素的个数。第2行包含n个正整数,描述了A序列。
第3行包含n个正整数,描述了B序列。
Output
输出仅包括一个非负整数,为最大的结果。注意:答案可能超过2^31-1,请使用int64或者long long(若使用printf输出请用“%I64d”)类型储存结果。
Sample Input
4 22 5 6 3
1 4 6 7
Sample Output
10Data Constraint
Hint
【样例说明】配对(2,7)、(6,1)结果为|2-7|+|6-1|=10。
【数据说明】
对于10%的数据,有k≤5,n≤10;
对于30%的数据,有n≤100;
对于50%的数据,有n≤1000;
对于100%的数据,有k≤n≤100000;a[i],b[i]≤1000000。
思路
首先要将数组a、b进行排序,a数组由小到大,b数组由大到小。然后用指针i=1,j=n,比较元素差的绝对值,选大的就行了。程序
var n,k,ans:int64; a,b:array[0..100001]of longint; procedure qsort(l,r:longint); var i,j,mid:longint; begin if l>=r then exit; i:=l; j:=r; mid:=a[(i+j)div 2]; repeat while a[i]<mid do inc(i); while a[j]>mid do dec(j); if i<=j then begin a[0]:=a[i]; a[i]:=a[j]; a[j]:=a[0]; inc(i); dec(j); end; until i>j; qsort(l,j); qsort(i,r); end; procedure qsort1(l,r:longint); var i,j,mid:longint; begin if l>=r then exit; i:=l; j:=r; mid:=b[(i+j)div 2]; repeat while b[i]>mid do inc(i); while b[j]<mid do dec(j); if i<=j then begin b[0]:=b[i]; b[i]:=b[j]; b[j]:=b[0]; inc(i); dec(j); end; until i>j; qsort1(l,j); qsort1(i,r); end; procedure init; var i:longint; begin readln(n,k); for i:=1 to n do read(a[i]); readln; qsort(1,n); for i:=1 to n do read(b[i]); readln; qsort1(1,n); end; procedure main; var i,j:longint; begin i:=1; j:=n; while k>0 do begin if abs(a[i]-b[i])>abs(a[j]-b[j]) then begin ans:=ans+abs(a[i]-b[i]); inc(i); end else begin ans:=ans+abs(a[j]-b[j]); dec(j); end; dec(k); end; end; begin init; main; writeln(ans); end.
相关文章推荐
- 【GDOI2018】模拟B组 Counting Friends
- 【GDOI2018模拟9.21】数列
- [JZOJ5261]【GDOI2018模拟8.12】求和
- 【JZOJ5260】【GDOI2018模拟8.12】区间第k小
- JZOJ 5207【GDOI2018模拟7.7】暴力大神hxx
- 2018.02.07【GDOI2018】模拟 B组 & C组
- 【GDOI2018模拟7.8】质数
- 【GDOI2018模拟7.8】矩阵
- 【GDOI2018模拟7.9】相逢是问候
- 【GDOI2018模拟7.14】小奇的糖果
- 【GDOI2018模拟8.7】的士碰撞
- 2018.01.27【GDOI2018】模拟C组—— 香烟
- 2018.02.05【GDOI2018】模拟C组——公牛和母牛
- 【JZOJ5262】【GDOI2018模拟8.12】树
- 【GDOI2018模拟8.12】求和
- 【GDOI2018模拟7.6】吃干饭
- 【jzoj5215】【BZOJ4870】【Shoi2017】【GDOI2018模拟7.9】【组合数问题】【矩阵快速幂】
- 【jzoj5221】【GDOI2018模拟7.10】【A】【线段树合并】
- 【JZOJ5219】【GDOI2018模拟7.10】B