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<algorithm>using namespace std;
struct Trade
{
int j,f;
double percent;
}ms[1100];
bool cmp(Trade a,Trade b)
{
return a.percent>b.percent;
}
int main()
{
int n,m,i;
while(~scanf("%d%d",&m,&n)&&(n!=-1||m!=-1))
{
for(i=0;i<n;i++)
{
scanf("%d %d",&ms[i].j,&ms[i].f);
ms[i].percent=(double)ms[i].j/ms[i].f;
}
sort(ms,ms+n,cmp);
double sum=0;
for(i=0;i<n;i++)
{
if(m>ms[i].f)
{
sum+=ms[i].j;
m-=ms[i].f;
}
else
{
sum+=ms[i].percent*m;
break;
}
}
printf("%.3lf\n",sum);
}
return 0;
}