zoukankan      html  css  js  c++  java
  • A

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

    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
     my answer:
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef struct room{
        double w;
        double v;
        double age;
    }room;
    bool cmp(room a,room b){
        if(a.age<b.age)return true;
        else return false;
    }
    int main()
    {
        int m,n;
        while(cin>>m>>n)
        {
            if(m==-1&&n==-1)
                return 0;
            room a[1001];
            for(int i=0;i!=n;i++){
                scanf("%lf%lf",&a[i].w,&a[i].v);
                a[i].age=a[i].v/a[i].w;
            }
            sort(a,a+n,cmp);
            double sum=0.0;
            int i=0;
            while(m>0&&i<n)
            {
                if(m>=a[i].v){
                    sum+=a[i].w;
                    m-=a[i].v;
                    i++;
                }
    			else{
                    sum+=(m*1.0/a[i].v)*a[i].w;
                    m-=m;
                    i++;
                }
            }
            printf("%.3f
    ",sum);
        }
        return 0;
    }

    原来提交的时候超时,检查了一下,发现限制时间是10秒,我的事11秒多,于是把cin改成了scanf我的时间就缩短了近5秒,于是在提交,返回WA,想了想意识到可能存在M用不完的情况,再交就AC了奋斗



  • 相关阅读:
    jsp 生成静态页面
    flash cs5
    sql 设置主键
    sql 分页查询
    java 获取系统时间
    android 源码 编译
    android 退出 activity
    广告平台
    android 引擎
    maya 花草 制作动画
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4248809.html
Copyright © 2011-2022 走看看