AtCoder 1807 食塩水
2024-10-09 19:52:31
题意
有 \(n\) 瓶食盐水,第 \(i\) 瓶为质量 \(w_i\),浓度 \(p_i\%\) 的食盐水,需要选出 \(k\) 瓶食盐水混合在一起,问最大浓度。
\(\texttt{Data Range:}1\leq n,k\leq 1000\)
题解
二分答案。
一开始在想各种贪心,然后各种贪心都假了,但是注意到这个东西是有单调性,(如果存在一种方案混合出来的食盐水浓度大于 \(p\) 那么也一定存在一种方案的浓度大于比 \(p\) 小的值),所以可以二分答案变成判定性问题。
现在考虑能不能选出 \(k\) 瓶食盐水混合起来浓度大于某个二分到的 \(p\),也即:
\[\frac{\sum\limits_{i=1}^{k}w_ip_i}{\sum\limits_{i=1}^{k}w_i}\geq p
\]
\]
乘过去再移过来
\[\sum\limits_{i=1}^{k}w_i(p_i-p)\geq 0
\]
\]
所以说我们只需要对 \(w_i(p_i-p)\) 排序然后贪心选最大的 \(k\) 个即可,实现可能有一些细节需要注意。
代码
#include<bits/stdc++.h>
using namespace std;
typedef int ll;
typedef long long int li;
typedef long double db;
const ll MAXN=2e5+51;
const db eps=1e-10;
struct Node{
ll p,w;
};
Node x[MAXN];
ll n,kk;
db l,r,mid;
db c[MAXN];
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
inline ll check(db mid)
{
db c2=0;
for(register int i=1;i<=n;i++)
{
c[i]=(x[i].p-mid)*x[i].w;
}
sort(c+1,c+n+1,greater<db>());
for(register int i=1;i<=kk;i++)
{
c2+=c[i];
}
return c2>=0;
}
int main()
{
n=read(),kk=read(),l=0,r=100;
for(register int i=1;i<=n;i++)
{
x[i].w=read(),x[i].p=read();
}
while(r-l>=eps)
{
mid=(l+r)/2;
check(mid)?l=mid:r=mid;
}
printf("%.9Lf\n",l);
}
最新文章
- ipython又一方便的调试和应用工具!!!
- 被IP代理网站屏蔽了,真是跪了
- 集成Spring后HibernateTemplate实现分页
- Android GLSurfaceView用法详解(二)
- [未完成]关于CSS的总结
- 小笔记(二):php数组
- Linux企业级开发技术(7)——libevent企业级开发之锁和线程
- Sprintf()的思考和引出的相关问题
- Gradle学习之部署上传项目
- vue本地项目设置通过手机访问
- 怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死
- java 中异常处理示例并捕获完整异常内容
- C#面向对象架构总结
- 点击返回上一页 wx.navigateTo不管用了
- Spring 扫描标签<;context:component-scan/>;
- mininet invalid literal for int() with base 10: &#39;cpu.cfs_period_us:&#39;
- vmware:Could not open /dev/vmmon: No such file or directory.
- 疯狂java讲义 第三版 笔记
- 如何编写Makefile,一份由浅入深的Makefile全攻略
- linux shell中FS、OFS、RS、ORS图解
热门文章
- 解决pycharm py文件运行后停止按钮变成了灰色的问题
- 拉格朗日乘子法 Lagrange multipliers
- 探究";补阶乘大法的本质";——糖水不等式!
- Magicodes.IE 2.4版本发布
- Flink深入浅出: 应用部署与原理图解(v1.11)
- 视频+图文教程 | Java之安装JDK与环境配置
- Docker学习:(一)初识Docker
- day09 Pyhton学习
- 联赛模拟测试17 A. 简单的区间 启发式合并
- 联赛模拟测试18 A. 施工 单调队列(栈)优化DP