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

  • 相关阅读:
    笔记35 跨重定向请求传递数
    判断邮箱的正则表达式
    按钮
    async await 的用法
    笔记34 Spring MVC的高级技术——处理multipart形式的数据
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Unique Binary Search Trees,Unique Binary Search Trees II
    Validate Binary Search Tree
    Populating Next Right Pointers in Each Node,Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/CKboss/p/3351140.html
Copyright © 2011-2022 走看看