zoukankan      html  css  js  c++  java
  • KC喝咖啡

    题目背景

    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>
    #define REP(i, a, b) for(int i = (a); i <= (b); ++ i)
    #define REP(j, a, b) for(int j = (a); j <= (b); ++ j)
    #define PER(i, a, b) for(int i = (a); i >= (b); -- i)
    using namespace std;
    const int maxn=1e5+5;
    template <class T>
    inline void rd(T &ret){
        char c;
        ret = 0;
        while ((c = getchar()) < '0' || c > '9');
        while (c >= '0' && c <= '9'){
            ret = ret * 10 + (c - '0'), c = getchar();
        }
    }
    struct node{
        int v,c;
        double val;
    }p[maxn];
    int n,m;
    double l,r,mid;
    bool comp(node a,node b){
              return a.val>b.val;
    }
    bool ok(double cur){
        double tot=0.0;
        REP(i,1,n)p[i].val=p[i].v-cur*(double)p[i].c;
        sort(p+1,p+1+n,comp);
        REP(i,1,m){
           tot+=p[i].val;
        }
        if(tot>=0)return true;
        else return false;
    }
    int main()
    {
        rd(n),rd(m);
        REP(i,1,n)rd(p[i].v);
        REP(i,1,n){
            rd(p[i].c);
            r=max(r,p[i].v*1.0/(double)p[i].c);
        }
        while(r-l>1e-6){
            mid=(l+r)/2.0;
            if(ok(mid))l=mid;
            else r=mid;
        }
        printf("%.3f",l);
        return 0;
    }
  • 相关阅读:
    GitLab CI/CD的官译【原】
    Gearman介绍、原理分析、实践改进
    Golang逃逸分析
    Go 程序是怎样跑起来的
    分布式系统的常见玩法
    开发更高可用、高质量的服务的一些建议
    理解 Kubernetes 的亲和性调度
    服务发现对比:Zookeeper vs etcd vs Consul
    探索etcd,Zookeeper和Consul一致键值数据存储的性能
    CentOS 7 安装无线驱动
  • 原文地址:https://www.cnblogs.com/czy-power/p/10466788.html
Copyright © 2011-2022 走看看