FatMouse' Trade(贪心)

来源:互联网 发布:js获取ios系统版本 编辑:程序博客网 时间:2024/05/21 04:42

A - FatMouse’ Trade
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit

Status
Description
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.

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

题意:多组输入,每组数据第一行给出M和N,接着N行,每行两个正整数J[i],F[i]。代表有M磅猫食,N中兑换JavaBeans的汇率,F[i]磅的猫食可以换J[i]的JavaBeans,如果剩下的M不足F[i],则按照比例部分兑换,输出保留三位小数

思路:对J[i]/F[i]的比值进行降序排列,然后逐个取值即可,注意数据类型最好全用double

代码

#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<math.h>#include<queue>using namespace std;struct node{    double J;    double F;    double num;//J/F} num[1000];bool cmp(node x,node y){    return x.num>y.num;}int main(){    int M,N;    while(~scanf("%d%d",&M,&N)&&M!=-1&&N!=-1)    {        for(int i=0; i<N; i++)        {            scanf("%lf%lf",&num[i].J,&num[i].F);            num[i].num=num[i].J/num[i].F;            //printf("%.3lf\n",num[i].num);        }        sort(num,num+N,cmp);        double sum=0.0;        for(int i=0; i<N; i++)        {            if(M>=num[i].F)            {                sum+=num[i].J;                M=M-num[i].F;            }            else            {                sum=sum+M/num[i].F*num[i].J;                break;            }        }        printf("%.3lf\n",sum);    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 要上班老人生病无人照顾怎么办 苹果手机一直说英文怎么办 公司很抠门怎么办英文怎么说 过了截港时间怎么办 截关日期是假日怎么办 恒温阀冷水进水堵塞怎么办 缺氧液泵管道堵塞怎么办 货物包装大集装箱装不下怎么办 微信收藏的视频格式错误怎么办 乙方被刑拘房租未付清怎么办 房贷银行卡号弄错怎么办 社保卡号弄错了怎么办 社保名字写错了怎么办 档案和身份证年龄姓名不一样怎么办 档案年龄与身份证年龄不一样怎么办 户口本身份证和档案不一样怎么办 如果档案姓名与身份证不符怎么办 感冒吃了白参怎么办 吃辣的嗓子疼怎么办 美团客户更改地址怎么办 忘记steam的账户名称怎么办 重置手机忘了密码怎么办 sp下行短信费扣怎么办 hr公司业务员招不到人怎么办 卖房中介被房倒压房子怎么办 电脑放不了dvd光盘怎么办 股东迟迟不交齐股本金怎么办 wps转pdf就乱了怎么办 被有用分期骗了怎么办 找不到以前有用分期的账号怎么办 打工去韩国不懂韩语怎么办? 想去韩国整容没钱怎么办 专接本没接上怎么办 抄写经文写错了怎么办 在外地修车被宰怎么办 国外汇款公司名称写错了怎么办 增值税专票没有机器编码怎么办 发票右上角的编码打不全怎么办 税票名称开错了怎么办 开票名称开错了怎么办 退休党员不交党费怎么办