您的位置:首页 > 其它

FZU 1685 跑跑卡丁车

2009-07-22 16:13 239 查看
跑跑卡丁车

Time Limit:1sMemory limit:32M
Accepted Submit:214Total Submit:586
cigam在宿舍闲着没事,又玩起了跑跑卡丁车,为了到达终点,他需要通过m段路,在通过每段路时,他可以利用加速器来加快速度,每段路最多只能使用一个加速器,假设一个加速器的加速效果为a,则本来需要用b分钟通过的一段路,就只需要b/a分钟通过,现在他拥有n个加速器,每个加速器只能使用一次,请你计算一下他至少需要多长的时间才能到达终点

Input

第一行有两个整数m和n (1<=n<=m<=1000),表示共有m段路程,n个加速器 第二行有m个整数ai(1<=i<=m),分别表示通过第i段路所需要的时间(1<=ai<=10000) 第三行有n个整数bi(1<=i<=n),分别表示第i个加速器的加速效果(2<=bi<=50)


Output

一个数代表他到达终点所需要的最少时间,精确到小数点后两位数

Sample Input

2 2
10 20
2 4
3 2
1 5 2
2 3

Sample output

10.00
3.67

Original: FOJ月赛-2009年2月- LWX

解题:

今天做的其中两题,都被初始化给耽误了。以后要乖用sizeof()了。

这题先把两个数组大到小排序,然后处理。

#include <iostream>
#include <iomanip>  
using namespace std;

void sort(int a[],int n)    
{    
    int i,j;    
    int k;    
    for(i=1;i<n;i++)   
    {    
        k=a[i];    
        j=i-1;    
        while(j>=0 && a[j]>k)   
        {    
            a[j+1]=a[j];    
            j--;    
        }    
        a[j+1]=k;          
    } 
	for (i=0;i<n/2;i++)
	{
		k=a[i];
		a[i]=a[n-i-1];
		a[n-i-1]=k;
	}
}  
int main()
{
	int m,n;
	double times=0.00;
	int a[1001];
	int b[1001];
	while (cin>>m>>n)
	{
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		for (int i=0;i<m;i++)
			cin>>a[i];
		for (int j=0;j<n;j++)
			cin>>b[j];
		sort(a,m);
		sort(b,n);
		for (int k=0;k<m;k++)
		{
			if(b[k]>=2 && b[k]<=50)
				times+=1.00*a[k]/b[k];
			else
				times+=1.00*a[k];
		}
		cout<<fixed<<setprecision(2)<<times<<endl;
		times=0;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: