首页 > 其他分享 >【解题报告】食塩水

【解题报告】食塩水

时间:2022-10-26 17:05:21浏览次数:119  
标签:报告 int double mid 食盐水 解题 include 浓度

ATcoder ABC034D 食盐水

杂项

题目链接

挺水的么这玩应不是 感觉远远不是是紫题难度

题意

给你N个装食盐水的容器,每个容器对应的食盐水浓度和食盐水的质量也给出,选几个混合起来,求可得最大浓度

分析

题目中要求是最大浓度,通过最大向贪心,DP,二分这些方向考虑

很明显,贪心的做法我是不知道可不可行的(因为我根本没贪出来),DP么,emm... 不会

然后就剩下二分了

我们可以发现其单调性:设一个方案的浓度x,使得 \(x> k\) ,易得到一定有一种方案可以使其浓度大于y( \(y\leq k\) )

所以我们可以二分浓度

check函数怎么写呢?我们考虑一个事实:每个容器中食盐的质量等于其对应的浓度乘上食盐水的质量,对于当前二分到的浓度mid,我们应该满足如下要求

\[\frac{\sum_{i=1}^{k}w_i\times p_i}{\sum_{i=1}^{k}w_i} \geq mid \]

然后移项得到这个式子

\[\sum_{i=1}^{k}w_i\times (p_i-mid) \geq 0 \]

然后就可以预处理一个g,代表上面的$ w_i\times (p_i-mid) $,然后按这个值从小到大排序,最后选出前k大的值求和与0比较即可

这题真的是紫题么qwq

AC code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>

using namespace std;

const int maxn=1010;
const double eps=1e-10;

int n,k;
struct water
{
	double p,w,g;
}w[maxn];

bool cmp(water x,water y)
{
	return x.g>y.g;
}

bool check(double x)
{
	for(int i=1;i<=n;i++) w[i].g=(w[i].p-x)*w[i].w;
	
	sort(w+1,w+n+1,cmp);
	
	double ans=0;
	
	for(int i=1;i<=k;i++)
	{
		ans+=w[i].g;
	}
	
	return ans>=0;
}

int main()
{
	cin>>n>>k;
	
	for(int i=1;i<=n;i++)
	{
		cin>>w[i].w>>w[i].p;
	}
	
	double l=0,r=100;
	
	while(r-l>=eps)
	{
		double mid=(l+r)/2;
		if(check(mid)) l=mid;
		else r=mid;
	}
	
	printf("%.9lf",l);
	
	return 0;
}

标签:报告,int,double,mid,食盐水,解题,include,浓度
From: https://www.cnblogs.com/SitoASK/p/16829021.html

相关文章

  • 10.25 解题报告
    T1用时:1.5h赛时\(30\)min切了,对着错大样例调了\(1\)h。#include<bits/stdc++.h>#definelllonglong#defineintlonglong//#defineullunsignedlonglong#......
  • CSP-S划分 解题报告
    n<=10爆搜即可n<=50什么乱搞n<=400有一个\(n^3\)的dp设dp[i][j]表示最后一段为j+1~i时的最小值直接三层循环转移即可dp[1][0]=0;for(inti=1;i......
  • 今日何切需求分析报告
    墨刀原型链接:https://modao.cc/app/PEy08GYGrk736vGZzYCshe#今日何切-分享项目简介:本项目属于微信小程序中的小游戏,用于日本麻将爱好者通过个人何切训练来提升自己的日......
  • CYSYOI 2022 Round #1 赛后题解报告
    CYSYOI2022Round#1赛后题解报告我是个大聪明,一个200分的蒟蒻忍泪前来写题解和赛后报告。/kk赛后题解T1CHT去挖矿题目详情算法解析好的,一道大模拟。直接上代......
  • 背包问题常见解题策略与例题解析
    背包问题作为常见的一种Dp题目的变法多种多样然而只要你理解透了背包的做法和各种优化模型就显而易见了千万不要似懂非懂如果还有疑虑可以参考我的另一篇文章​​​背......
  • 开源软件供应链攻击激增430%,供应链安全不容小觑丨行业报告解读
    近日,业内知名机构Sonatype在本月18号的DevOps企业大会上发布其年度软件供应链现状报告。本文为你总结该报告的关键信息,带你了解今年的软件供应链安全状况。开源存储库......
  • 10.22 解题报告
    T1用时:约\(30\)min首先不难发现,若干个人组成的集合\(A\)若满足条件的话,当且仅当对于每一个元素\(A_i\),都有\(b_{A_i}\le\suma_{A_j}-a_{A_i}\),也即\(b_{A_i}+a_......
  • 10.24集训解题报告
    T1方程(\(equation\))题面:给定\(4\)个正整数\(a\),\(b\),\(c\),\(d\),并且保证\(c\)\(×\)\(d\)\(≤\)\(10^6\),请你求出有多少组正整数对\((x,y)\)满足如......
  • 10.23解题报告
    T1用时:\(20\)min要求统计数组\(a\)中有序三元组\((x,y,z)\)的个数,满足\(\gcd(a_x,a_y)=a_z\),直接枚举\(x\),\(y\),将\(x\)后面的加入一个map中,统计答案即可。#......
  • 10.24解题报告
    T1用时:约\(100\)min这个题用的时间最多,主要原因还是想多了,应该注意多观察一下题目性质:题目要求求出这个式子的正整数解个数:\(\frac{a}{x}+\frac{b}{c}=\frac{d}{y}\)......