一对工单收益的残差是 (x+y)modq。它等于 x+y 或者 x+y−q,所以全部绑定的总和一定是 ∑x+∑y−q×(进位次数)。
排期模块今晚要把研发侧和测试侧的工单一一绑定。规则来自额度拆分:两单收益加总后对额度格子取模,得到这一对的残差;残差越小,越容易写进本周额度。排期同学必须找出总残差最小的绑定方案。
两侧各有 k 张工单。研发侧收益是 x1,x2,…,xk,测试侧收益是 y1,y2,…,yk。绑定必须一一对应:存在 1 到 k 的排列 p,把研发侧第 i 张与测试侧第 pi 张配在一起。
一对工单的残差定义为 (xi+ypi)modq,其中 q 是额度格子。总残差是所有配对残差之和,也就是
∑i=1k((xi+ypi)modq)。
请计算所有绑定方案里,总残差的最小值。
工单数满足 1≤k≤ 300000,额度格子满足 1≤q≤ 1000000000,且 0≤xi,yi<q。
第一行两个正整数 k、q(1≤k≤ 300000,1≤q≤ 1000000000),表示每侧工单数和额度格子。
第二行 k 个整数 x1,x2,…,xk(0≤xi<q),表示研发侧收益。
第三行 k 个整数 y1,y2,…,yk(0≤yi<q),表示测试侧收益。
输出一个整数,即最小总残差。
输入
3 5
4 0 1
1 4 2
输出
2
说明
一种最优绑定是 4 配 1、1 配 4、0 配 2。残差分别是 (4+1)mod5=0、(1+4)mod5=0、(0+2)mod5=2,总和为 2。
输入
1 10
3
4
输出
7
说明
只有一对,3+4=7,小于额度格子 10,残差就是 7。
输入
4 7
1 2 3 6
1 1 4 5
输出
2
说明
把 6 配 1、3 配 4、2 配 5、1 配 1,残差分别是 0、0、0、2,总和为 2。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.