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);
}
}

本文探讨了FatMouse如何通过最优策略用猫粮换取最大数量的JavaBeans。问题描述了一个包含多个房间的仓库,每个房间有不同的JavaBeans和所需的猫粮比例。通过分析不同比例并按最优顺序进行交易,文章提供了一种算法来确定FatMouse能获得的最大JavaBeans数量。

638

被折叠的 条评论
为什么被折叠?



