Description
康康准备了 M 斤的食物, 准备跟舍长交换哲学之宝 ♂
舍长有 N 个房间. 第 i 个房间有 J[i] 的 ♂ 需要 F[i] 斤的食物. 康康可以不换完整个房间的♂ ,
他可以用 F[i]* a% 的食物 换 J[i]* a% 的 ♂
现在给你一个实数 M 问你康康最多能获得多少的 ♂
Input
The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.
Output
For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans thatFatMouse can obtain.
Sample Input
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
Sample Output
13.333 31.500
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node { double J,F,K; }a[1010]; bool cmp(node x,node y) { return x.K>y.K; } int main() { int m,n; while(scanf("%d%d",&m,&n)!=EOF&&(n!=-1&&m!=-1)) { for(int i=0;i<n;i++) { scanf("%lf%lf",&a[i].J,&a[i].F); a[i].K=a[i].J/a[i].F; } sort(a,a+n,cmp); double sum=0; int k=-1; for(int i=0;i<n;i++) { if(m-a[i].F>0) { m-=a[i].F; sum+=a[i].J; } else { k=i; break; } } if(k!=-1) { sum+=(m/a[k].F)*a[k].J; } printf("%.3lf\n",sum); } }