/*题意是n个人上n天班,每个人必须早上和下午都上,给你一个时间t,要求求出n个人每个人上班时间减去t的总和最小*/
/*找到一个贪心策略即可,将两个数组按照升序降序排列即为最优解*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int m[600];
int a[600];
bool cmp1(const int a, const int b)
{
return a < b;
}
bool cmp2(const int a, const int b)
{
return a > b;
}
int main()
{
int t;
while(scanf("%d", &t) != EOF){
while(t--){
int n, c;
scanf("%d%d", &n, &c);
for(int i = 0; i < n; i++) scanf("%d", &m[i]);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
sort(m, m+n, cmp1);
sort(a, a+n, cmp2);
int sum = 0;
for(int i = 0; i < n; i++){
if(m[i] + a[i] - c <= 0) continue; //这里注意是在每一步时候判断改天是否为0,而不是判断sum是否为0,因为有可能(sum>0,m[i]+a[i]-c<0且sum>m[i]+a[i]-c<0)
else
sum += (m[i] + a[i] - c);
}
printf("%d\n", sum);
}
}
return 0;
}
uva6698
最新推荐文章于 2020-05-04 09:37:39 发布