I I U C O N L I N E C O N T E S T 2 0 0 8 | |
Problem E: The Bus Driver Problem | |
Input: standard input Output: standard output | |
| |
In a city there are n bus drivers. Also there are n morning bus routes & n afternoon bus routes with various lengths. Each driver is assigned one morning route & one evening route. For any driver, if his total route length for a day exceeds d, he has to be paid overtime for every hour after the first d hours at a flat r taka / hour. Your task is to assign one morning route & one evening route to each bus driver so that the total overtime amount that the authority has to pay is minimized.
| |
Input | |
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 | Output for Sample Input |
2 20 5 10 15 10 15 2 20 5 10 10 10 10 0 0 0 | 50 0 |
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[110];
int b[110];
int cmp1(int a,int b)
{
return a<b;
}
int cmp2(int a,int b)
{
return a>b;
}
int main()
{
int n,d,r;
while(scanf("%d%d%d",&n,&d,&r))
{
if(n==0&&d==0&&r==0)
break;
int sum=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
scanf("%d",&b[i]);
sort(a+1,a+n+1,cmp1);
sort(b+1,b+n+1,cmp2);
for(int i=1;i<=n;i++)
{
if(a[i]+b[i]>d)
sum+=(a[i]+b[i]-d)*r;
}
printf("%d\n",sum);
}
return 0;
}