We often go to supermarkets to buy some fruits or vegetables, and on the tag there prints the price for a kilo. But in some supermarkets, when asked how much the items are, the clerk will say that a yuan for b kilos (You don't need to care about what"yuan" is), the same as a / b yuan for a kilo.
Now imagine you'd like to buy m kilos of apples. You've asked n supermarkets and got the prices. Find the minimum cost for those apples.
You can assume that there are enough apples in all supermarkets.
The first line contains two positive integers n and m (1 ≤ n ≤ 5 000, 1 ≤ m ≤ 100), denoting that there are n supermarkets and you want to buy m kilos of apples.
The following n lines describe the information of the supermarkets. Each line contains two positive integers a, b (1 ≤ a, b ≤ 100), denoting that in this supermarket, you are supposed to pay a yuan for b kilos of apples.
The only line, denoting the minimum cost for m kilos of apples. Please make sure that the absolute or relative error between your answer and the correct answer won't exceed 10 - 6.
Formally, let your answer be x, and the jury's answer be y. Your answer is considered correct if .
3 5 1 2 3 4 1 3
1.66666667
2 1 99 100 98 99
0.98989899
In the first sample, you are supposed to buy 5 kilos of apples in supermarket 3. The cost is 5 / 3 yuan.
In the second sample, you are supposed to buy 1 kilo of apples in supermarket 2. The cost is 98 / 99 yuan.
题意:有n个超市,每个超市可以用a元买到b千克苹果,现在要买m个苹果,求最少要花多少钱。
水题,然而做的时候出现了一些问题,现在来总结一下:
题目的误差范围为1e-6,所以直接用double保存即可,可是作者当时做题时使用了long double,虽然精度更高,可却在某些样例超时。这说明对于long double 类型的数据,比较大小与运算花费的时间要比double 型的数据大的多,一般做题时若题目要求时间较短且数据规模较大时尽量不要首先使用。
#include <bits/stdc++.h>
using namespace std;
int main()
{
double m;
int n;
while (cin>>n>>m){
double ans=100000.0;
for (int i=0;i<n;i++){
double yuan,kilo;
cin>>yuan>>kilo;
ans=min(ans,m*yuan/kilo);
}
printf("%.8lf\n",ans);
}
return 0;
}