首页 > 其他分享 >P1570 KC 喝咖啡(小数二分)

P1570 KC 喝咖啡(小数二分)

时间:2023-03-22 23:45:50浏览次数:59  
标签:KC 喝咖啡 int double P1570 mid sum

题意:给定调料种数 \(n\) 和能加入的调料数 \(m\),以及每种调料的美味度 \(v_i\),消耗的时间 \(c_i\)。

请选择单位时间的美味度最大的咖啡。

分析:\(t=\frac{\sum{v_i}}{\sum{c_i}}\) --- 取最大值,二分答案找右边界。

但是如何确定元素合法?
选择的最优的前 \(m\) 种配料,如果合法,那么继续取右边界。

\(t=\frac{\sum{v_i}}{\sum{c_i}}\) 可以进行变形:\(\sum{v_i}-t*\sum{c_i}=0\)。

所以想要 \(t\) 最大,那么公式整体需要尽可能取大---即配料最优。
此时选择最优的前 \(m\) 种配料即可。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10, INF = 0x3f3f3f3f;
int n, m, v[N], c[N];
double a[N];
// 检查答案为x 时是否满足 ∑v - x * ∑c >=0.
bool chk(double x) {
    for (int i = 1; i <= n; i++)
        a[i] = v[i] - x * c[i];
    sort(a + 1, a + 1 + n, greater<double>());// 降序排序
    double s = 0;
    for (int i = 1; i <= m; i++) s += a[i];
    return s >= 0;
}
int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++) scanf("%d", &v[i]);
    for (int i = 1; i <= n; i++) scanf("%d", &c[i]);

    double l = 0, r = 1000;
    while (r - l > 1e-6) {
        double mid = (l + r) / 2.0;
        if (chk(mid)) l = mid;
        else r = mid;
    }
    printf("%.3lf\n", l);
    return 0;
}

标签:KC,喝咖啡,int,double,P1570,mid,sum
From: https://www.cnblogs.com/hellohebin/p/17245909.html

相关文章

  • Codeforces Round 368 (Div. 2) D. Persistent Bookcase 主席树维护bitset
    在学主席树时找到了这道题本来yyyy了一个二维的主席树这种东西,然后发现很多信息好像维护不了观察到n和m都很小,考虑把一整行看成一个节点,开一个bitset然后区间取反、单点......
  • KCP协议浅析
    概述KCP协议结合了TCP和UDP协议的特点,是一个快速可靠的协议。引述官方介绍:KCP是一个快速可靠协议,能以比TCP浪费10%-20%的带宽的代价,换取平均延迟降低30%-40%,且最大延......
  • KCL v0.4.6 alpha 发布!- 更多 Kubernetes 工具集成,更好的 IDE 错误提示
    简介KCL团队很高兴地宣布KCLv0.4.6-alpha.1版本现在已经可用!您可以在KCLv0.4.6-alpha.1发布页面或者KCL官方网站获得KCL二进制下载链接和更多详细发布信息......
  • Dokcer ip addr 查看容器内容网络地址报错
    查看容器的内部网络地址出错#查看容器的内部网络地址dockerexec-ittomcat01ipaddr#报错:OCIruntimeexecfailed:execfailed:unabletostartcontainerpr......
  • EntityFramworkCore7笔记
    转载  编写和拼接大量的SQL语句.这样做很容易出错,且容易发生SQL注入的风险.同时由于数据库的数据类型和语言的数据类型不一致,我们需要手动对数据类型进行转换,......
  • sdkconfig报错
    2023-03-0910:45:22问题描述:打开软件Espressif-IDE,编译示例blink通过,打开sdkconfig报错,如下图。解决方法:卸载干净,重新安装最新版本5.0.1  控制面板卸载ESP-IDFTo......
  • LeakCanary检查内存泄露
    LeakCanary检测内存泄露内存泄露内存泄露的概念当一个对象已经不再需要却无法被GC回收,就是内存泄露内存泄露的危害“Asmallleakwillsinkagreatship.”-Benjamin......
  • 一个关于 Kconfig 和 Makefile 的坑
    ```make#Includevariablesandrulesgeneratedbymenuconfig-include$(NPC_HOME)/include/config/auto.conf-include$(NPC_HOME)/include/config/auto.conf.cmd......
  • NET6 使用 Pomelo.EntityFrameworkCore.MySql,无法从“string”转化为Microsoft.Entity
    NET6使用Pomelo.EntityFrameworkCore.MySql,无法从“string”转化为Microsoft.EntityFrameworkCore.ServerVersion。关于net6使用了6.0版本Pomelo.EntityFrameworkCor......
  • KCL 语言和 YAML 字符串的区别是什么?一文完全解答
    什么是YAMLYAML是一种数据序列化语言,通常用于编写配置文件。YAML代表另一种标记语言或YAML不是标记语言(递归首字母缩写词),YAML通常用于数据,而不是文档。YAML还是一种......