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

  • 相关阅读:
    iOS RunTime
    js本地对象的操作
    js面向对象实现切换面板
    css3上下翻页效果
    Normalize.css用法
    javasript深度拷贝
    div中div水平垂直居中
    正则表达式匹配括号内网址
    ajax聊天
    移动端px转rem的两种方法
  • 原文地址:https://www.cnblogs.com/CKboss/p/3351140.html
Copyright © 2011-2022 走看看