题意

有 \(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);
}

最新文章

  1. ipython又一方便的调试和应用工具!!!
  2. 被IP代理网站屏蔽了,真是跪了
  3. 集成Spring后HibernateTemplate实现分页
  4. Android GLSurfaceView用法详解(二)
  5. [未完成]关于CSS的总结
  6. 小笔记(二):php数组
  7. Linux企业级开发技术(7)——libevent企业级开发之锁和线程
  8. Sprintf()的思考和引出的相关问题
  9. Gradle学习之部署上传项目
  10. vue本地项目设置通过手机访问
  11. 怎么让 Android 程序一直后台运行,像 QQ 一样不被杀死
  12. java 中异常处理示例并捕获完整异常内容
  13. C#面向对象架构总结
  14. 点击返回上一页 wx.navigateTo不管用了
  15. Spring 扫描标签&lt;context:component-scan/&gt;
  16. mininet invalid literal for int() with base 10: &#39;cpu.cfs_period_us:&#39;
  17. vmware:Could not open /dev/vmmon: No such file or directory.
  18. 疯狂java讲义 第三版 笔记
  19. 如何编写Makefile,一份由浅入深的Makefile全攻略
  20. linux shell中FS、OFS、RS、ORS图解

热门文章

  1. 解决pycharm py文件运行后停止按钮变成了灰色的问题
  2. 拉格朗日乘子法 Lagrange multipliers
  3. 探究&quot;补阶乘大法的本质&quot;——糖水不等式!
  4. Magicodes.IE 2.4版本发布
  5. Flink深入浅出: 应用部署与原理图解(v1.11)
  6. 视频+图文教程 | Java之安装JDK与环境配置
  7. Docker学习:(一)初识Docker
  8. day09 Pyhton学习
  9. 联赛模拟测试17 A. 简单的区间 启发式合并
  10. 联赛模拟测试18 A. 施工 单调队列(栈)优化DP