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<cstdio> #include<algorithm> using namespace std; struct node { double key; double weight; double ave; }peo[10001]; bool cmp(node x,node y) { return x.ave>y.ave; } int main() { int n; double m; while( scanf("%lf %d",&m,&n) ) { if( (m==-1) && (n==-1) ) break; for(int i=0;i<n;i++) { scanf("%lf %lf",&peo[i].key,&peo[i].weight); peo[i].ave=(double)peo[i].key/peo[i].weight; //必须要加强转 } sort(peo,peo+n,cmp); double cnt=0; for(int i=0;i<n;i++) { if(m>=peo[i].weight) { cnt+=peo[i].key; m-=peo[i].weight; } else { cnt+=peo[i].ave*m; break; } } printf("%.3lf\n",cnt); } return 0; }