zoukankan      html  css  js  c++  java
  • HDOJ 1009

    贪心问题,但要注意一些特殊数据:
    尤其是M=0,与F==0时的情况。
    0 1
    1 0
    1.000
    1 0
    0.000
    5 4
    10000 5
    2000 2
    100 0
    300 0
    10400.000
    数据类型用double,就这样



    #include <iostream>
    #include <algorithm>
    #include <iomanip>

    using namespace std;

    struct jf
    {
        double a;
        double b;
        double c;
    }JF[1005];

    int cmp_jf(const void *a,const void *b)
    {
        if(((jf*)a)->c-((jf*)b)->c>1e-6)  return -1;
        else return 1;
    }

    int main()
    {
        double M,N;
        cin>>M>>N;
    while(M!=-1||N!=-1)
    {
        for(int i=0;i<N;i++)
        {
            cin>>JF.a>>JF.b;
            if(JF.b==0) JF.c=999999999;
            JF.c=JF.a/JF.b;
        }

        qsort(JF,N,sizeof(JF[0]),cmp_jf);

        double sum=0;
        for(int i=0;i<N;i++)
        {
            if(JF.b==0)
            {
                sum=sum+JF.a;
            }
            if(M>1e-6)
            {
                 if(M>=JF.b&&JF.a-JF.c*JF.b>1e-6)
                 {
                     M=M-JF.b;
                     sum=sum+JF.c*JF.b;

                    // cout<<"sum1:"<<sum<<endl;
                 }
                 else if(M>=JF.b&&JF.a-JF.c*JF.b<=1e-6)
                 {
                     double B=JF.a/JF.c;
                     M=M-B;
                     sum=sum+JF.a;

                    // cout<<"sum2:"<<sum<<endl;
                 }
                 else if(M<JF.b&&JF.a-JF.c*M>=1e-6)
                 {
                     sum=sum+JF.c*M;
                     M=M-M;

                   //  cout<<"sum3:"<<sum<<endl;
                 }
                 else if(M<JF.b&&JF.a-JF.c*M<=1e-6)
                 {
                     double B=JF.a/JF.c;
                     M=M-B;
                     sum=sum+JF.a;

                   //  cout<<"sum4:"<<sum<<endl;
                 }
            }
            else break;
        }
        cout<<fixed<<setiosflags(ios::showpoint)<<setprecision(3)<<sum<<endl;
        cin>>M>>N;
    }
        return 0;
    }

  • 相关阅读:
    黑马程序员__线程
    java内部类、异常、包
    java面向对象
    java中字符串切割的方法总结
    md5可能会被破解咋办?
    Struts2使用拦截器完成权限控制示例
    关于Spring的Controller及Struts的Action的多线程的注意
    从打车软件你能想到多少?盈利模式?商机?大数据?移动互联网蛋糕?生活方式改变withApp?
    动态加载JS脚本的4种方法
    extjs Cannot read property 'dom' of null
  • 原文地址:https://www.cnblogs.com/CKboss/p/3351140.html
Copyright © 2011-2022 走看看