codeforces Supermarket(水题,贪心)
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.
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define maxn 5005 typedef struct Pay{ double w; double v; double pri; }Pay; int cmp(const void *a,const void *b){ Pay *c = (Pay*)a; Pay *d = (Pay*)b; return c->pri>d->pri?1:-1; } int main() { int m,i,n; Pay s[maxn]; scanf("%d%d",&n,&m); for(i = 0;i < n;i++){ scanf("%lf%lf",&s[i].v,&s[i].w); s[i].pri = s[i].v/s[i].w; } qsort(s,n,sizeof(s[0]),cmp); printf("%.10f",m*s[0].pri); return 0; }