海淀区赛 20180506 第一题

试题描述

冬奥会在紧张的筹备过程当中,根据计划某个比赛日共有2*n条线路需要提供观众的转场服务,上午和下午各n条线路,安排n个司机为当天的观众进行服务,使得上、下午的每条线路都恰好分配到一个司机。

组委会需要按照司机的行驶距离付费,在距离不超过r时只需要支付基本费用,当距离超过r,按照每单位距离s元付费。

输入

输入文件包含多组测试数据。每组数据的第一行包含3个整数n,r,s;第二行包含n个整数,即上午各条线路的的行驶距离;第三行包含n个整数,即下午各条线路的形式距离。行驶距离不超均为不超过10 000的正整数。当n,r,s都为0时输入结束。

输出

对于每组数据,输出支付给每个司机基本费用之外的最小费用。

输入示例

2 100 5
50 50
50 50
2 100 5
50 60
50 60
0 0 0

输出示例

0
100

其他说明

【数据规模与约定】
对于100%的数据,1 ≤ n ≤ 1000,1 ≤ r ≤ 10000,1 ≤ s ≤ 200。

思路 :

区赛原题,一个贪心直接搞定,题意和测试数据比较坑 容易理解错。

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
	int n,r,s,sum=0,x,mor[1001],aft[1001];//mor数组为早上的行驶距离,aft为晚上的。
	while(1)//使用while(1)输入(多组数据)
	{
		sum=0;//每次sum置成0
                 scanf("%d%d%d",&n,&r,&s);
		if(n==0&&r==0&&s==0)
		{
			break;//结束输入
		}
		for(int i=0;i<n;i++)
		{
			scanf("%d",&mor[i]);//输入
		}
		for(int i=0;i<n;i++)
		{
			scanf("%d",&aft[i]);//输入
		}
	
	sort(mor,mor+n);
	sort(aft,aft+n);//排序
	long long ans=0;//开long long
	for(int i=0;i<n;i++)
	{
		int p=mor[i]+aft[n-i-1];//贪心 用早上最小加上下午最大 依此类推
		ans+=p>r?(p-r)*s:0;//处理答案 超过和没超过两种情况
	}
	    cout<<ans<<endl;//输出
	}
}

猜你喜欢

转载自blog.csdn.net/ljqmiao_/article/details/81169301