The Bus Driver
The first line of each test case has three integers n, d and r, as described above. In the second line,
there are n space separated integers which are the lengths of the morning routes given in meters.
Similarly the third line has n space separated integers denoting the evening route lengths. The lengths
are positive integers less than or equal to 10000. The end of input is denoted by a case with three 0’s.
Output
For each test case, print the minimum possible overtime amount that the authority must pay.
Constraints
• 1 ≤ n ≤ 100
• 1 ≤ d ≤ 10000
• 1 ≤ r ≤ 5
Sample Input
2 20 5
10 15
10 15
2 20 5
10 10
10 10
0 0 0
Sample Output
50
0
题目简述:
为公交司机分配线路,每人每天早晚各一条线路,每天工作时长超过一定时间就要算加班费,现给出每个线路工作时长,问每天最少要支付多少加班费。
题目分析:
贪心,贪心策略是,将早班最长的和晚班最短的分给某个司机。
代码实现:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cmath>
#include<queue>
//#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
#define pf printf
#define sf(n) scanf("%d", &n)
#define sff(a,b) scanf("%d %d", &a, &b)
#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
#define ms(i,j) memset(i,j,sizeof(i))
int a[105],b[105];
bool vs(int a,int b)
{
return a>b;
}
int main()
{
int n,d,r,sum;
while(sfff(n,d,r)&&n)
{
sum=0;
for(int i=0; i<n; i++)
sf(a[i]);
for(int i=0;i<n;i++)
sf(b[i]);
sort(a,a+n);
sort(b,b+n);
for(int i=0;i<n;i++)
if(a[i]+b[n-i-1]>d)
sum+=(a[i]+b[n-i-1]-d);
pf("%d\n",sum*r);
}
}