FatMouse' TradeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 94473 Accepted Submission(s): 32890 Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
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 that FatMouse 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 题目大意: 老鼠有F[i]的猫食,去找老鼠换, F[i]换J[i];如果猫食物不够换的话,可以用百分比,来进行交换。
|
#include<stdio.h>
#include<algorithm>
using namespace std;
struct mm {
double a,b,c;
} p[1000];
bool cmp(mm d1,mm d2) { //按照比率大小进行排序;
return d1.c>d2.c;
}
int main() {
double m; //注意类型,m为double。n为int;
int n;
double a,b,c;
while(~scanf("%lf%d",&m,&n)) {
if(m==-1&&n==-1)break;
double sum=0;
for(int i=0; i<n; i++) {
scanf("%lf %lf",&a,&b);
p[i].a=a;
p[i].b=b;
p[i].c=a/b;
}
sort(p,p+n,cmp);
for(int i=0; i<n; i++) {
if(p[i].b<=m) {
sum=sum+p[i].a;
m=m-p[i].b;
} else {
sum=sum+(p[i].a/p[i].b)*m;
break;
}
}
printf("%.3f\n",sum);
//for(int i=0; i<n; i++)printf("%.2f %.2f %.2f\n",p[i].a,p[i].b,p[i].c);
}
}