zoukankan      html  css  js  c++  java
  • 洛谷 P1570 KC喝咖啡【二分答案/最大化平均值模板】

    题目描述
    话说KC和SH在福州的时候常常跑去85°C喝咖啡或者其他的一些什么东西。

    这天,KC想要喝一杯咖啡,服务员告诉他,现在有n种调料,这杯咖啡只可以加入其中的m种(当然KC一定会加入m种,不会加入少于m种的调料),根据加入的调料不同,制成这杯咖啡要用的时间也不同,得到的咖啡的美味度也不同。

    KC在得知所有的n种调料后,作为曾经的化竞之神的他,马上就知道了所有调料消耗的时间ci以及调料的美味度vi。由于KC急着回去刷(play)题(games),所以他想尽快喝到这杯咖啡,但他又想喝到美味的咖啡,所以他想出了一个办法,他要喝到(Σvi)/(Σci)最大的咖啡,也就是单位时间的美味度最大的咖啡。

    现在,KC把调料信息告诉了SH,要SH帮他算出喝到的咖啡的(Σvi)/(Σci),但SH不想帮KC算这东西,于是KC就只能拜托你来算了。

    注释:Σ表示求和,所以(Σvi)/(Σci)表示 美味度的总和 除以 消耗时间的总和。

    输入输出格式
    输入格式:
    输入数据第一行为一个整数n,m,表示调料种数和能加入的调料数。接下来2行,每行为n个数,第一行第i个整数表示调料i的美味度vi,第二行第i个整数表示调料i消耗的时间ci。

    输出格式:
    一个整数T,表示KC喝的咖啡的最大(Σvi)/(Σci),保留三位小数。

    输入输出样例
    输入样例#1:
    3 2
    1 2 3
    3 2 1
    输出样例#1:
    1.667
    (选2号和3号调料,(2+3)/(2+1)=1.667)
    说明
    数据范围:

    20%:1<=n<=5。

    50%:1<=n<=10。

    80%:1<=n<=50。

    100%:1<=n<=200,1<=m<=n,1<=c[i],v[i]<=10000。

    保证答案不超过1000。

    #include<bits/stdc++.h>
    
    const double eps = 1e-8;
    const int maxn = 1e6+5;
    #define inf 0x3f3f3f3f
    #define ll long long
    using namespace std;
    /*
    有n个物品的重量和价值分别是wi和vi
    从中选出k个物品使得单位重量价值最大
    
    */
    int n,k;
    int w[maxn],v[maxn];
    double y[maxn];
    bool cmp(int a,int b)
    {
        return a>b;
    }
    bool check(double x)
    {
        for(int i=0;i<n;i++)
            y[i] = v[i] - w[i] * x;
        sort(y,y+n);
        double sum = 0;
        for(int i=0; i<k; i++)
            sum += y[n-i-1];
        return sum>=0;
    }
    void solve()
    {
        double l = 0, r =inf, mid;
        while(r-l>eps)
        {
            mid = (l+r)/2;
            if(check(mid))
                l=mid;
            else r=mid;
        }
        printf("%.3f
    ",r);
    }
    int main()
    {
        while(~scanf("%d%d",&n,&k))
        {
            for(int i=0;i<n;i++)
                cin>>v[i];
            for(int i=0;i<n;i++)
                cin>>w[i];
            solve();
        }
    }
    
    
  • 相关阅读:
    Flex AIR应用GPS定位功能(Android和IOS)
    Flex AIR应用拍照功能(Android和IOS版本)
    读取Flex AIR应用程序设置
    查看本机开放的端口号,查看某个端口号是否被占用,查看被占用的端口号被哪个进程所占用,如何结束该进程
    Eclipse设置默认编码为UTF-8
    Eclipse使用教程之精华篇
    hdu 1829 分组并查集
    hdu 1316高精度
    hdu 4287 字典树问题
    hdu 1867 kmp共工前后缀串问题
  • 原文地址:https://www.cnblogs.com/Roni-i/p/9360970.html
Copyright © 2011-2022 走看看