NOIP模拟:能源(二分答案)

时间:2022-09-01 09:40:32

题目描述

小美为了拯救世界能源危机,她准备了 n 台蓄电池。一开始每台蓄电池有 ai 个单位的能量。

现在她想把 n 台蓄电池调整到能量相同。对于每台蓄电池可以给另一台蓄电池传递能量。
但是会有能量损耗,每次给 x 个单位的能量只能接受到 $ x - \frac{100 - k}{100}$的能
量。k 是损耗参数。小美想知道每个蓄电池最多能同时到多少能量。

输入格式

  从文件 energy.in 中读入数据。
  第一行两个整数 n,k。
  第二行 n 个数表示 $a_i$。

输出格式

  输出到文件 energy.out 中。

  一行保留 6 位小数表示答案。

样例输入

  3 50
  4 2 1

样例输出

  2.000000

题目分析

   看到求最值问题先想到二分答案。本题只需二分最后的答案 :

  现将输入的数组a排序,设当前枚举的答案为ans:

  $$ret1 =  \sum_{i}^{a_i <= ans} ans - a_i$$

  $$ret2 = \sum_{i}^{a_i > ans} a_i - ans$$

  最后看看是否满足$ret1 >= ret2 × \frac{100 - k}{100}$

  如果是则 l = mid 否则 r = mid;

  小数二分时可使用for()循环。

for(int i = ; i <= ; i++){
double mid = (l + r) / ;
if(check(mid)) l = mid;
else r = mid;
}

CODE

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std; const int N = ;
const int oo = 0x3f3f3f3f;
const double eps = 1e8; int n, k;
double a[N];
double maxx = -oo;
double p; inline int read(){
int i = , f = ; char ch = getchar();
for(; (ch < '' || ch > '') && ch != '-'; ch = getchar());
if(ch == '-') f = -, ch = getchar();
for(; ch >= '' && ch <= ''; ch = getchar())
i = (i << ) + (i << ) + (ch - '');
return i * f;
} inline bool check(double m){
double ret = ;
for(int i = ; i <= n; i++){
if(a[i] > m) ret += (double)(a[i] - m) * ( - p);
else ret -= (double)(m - a[i]);
}
return ret >= ;
} inline void solve(){
sort(a + , a + n + );
double l = , r = maxx + ;
for(int i = ; i <= ; i++){
double mid = (l + r) / 2.0;
if(check(mid)) l = mid;
else r = mid;
}
printf("%.6f", l);
} int main(){
//freopen("h.in", "r", stdin);
n = read();
k = read();
p = (double)k / ;
for(int i = ; i <= n; i++)
scanf("%lf", &a[i]), maxx = max(maxx, a[i]);
solve();
return ;
}

NOIP模拟:能源(二分答案)的更多相关文章

  1. 主席树&sol;线段树模拟归并排序&plus;二分答案(好题)——hdu多校第4场08

    用主席树写起来跑的快一点,而且也很傻比,二分答案,即二分那个半径就行 主席树求的是区间<=k的个数 #include<bits/stdc++.h> using namespace s ...

  2. NOIP模拟 Work - 二分 &plus; 树状数组 &sol; &quest;&quest;&quest;

    题目分析 如果没有最后的注意事项,此题就是二分裸题.有了注意事项,会有两种思路: 在线:二分天数t,并在主席树上求1~t天中大于d(浪费的时间)的时间之和以及数量,答案即为:sum - d * cnt ...

  3. 【noip模拟赛6】收入计划 最大值的最小值 二分答案

    描述 高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱.从今天起,Matrix67将连续工作N天(1<=N<=100 000).每一天末他可以领取当天及前面若干天里没有领取的工 ...

  4. &lbrack;NOIP 2015&rsqb;运输计划-&lbrack;树上差分&plus;二分答案&rsqb;-解题报告

    [NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...

  5. 2018&period;10&period;14 NOIP训练 直线(二分答案&plus;st表&plus;切比雪夫距离转化)

    传送门 二分答案好题. 这已经是当年普及组模拟时挖的坑了233. 这道题还是很不错的. 考虑把坐标系转个45度再操作. 为了不爆精度可以直接转切比雪夫距离. 然后就直接二分答案. 其中竖线就按二分的答 ...

  6. &lbrack;NOIP提高&amp&semi;洛谷P1024&rsqb;一元三次方程求解 题解(二分答案)

    [NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...

  7. 疫情控制 2012年NOIP全国联赛提高组&lpar;二分答案&plus;贪心&rpar;

    P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...

  8. cogs 2109&period; &lbrack;NOIP 2015&rsqb; 运输计划 提高组Day2T3 树链剖分求LCA 二分答案 差分

    2109. [NOIP 2015] 运输计划 ★★★☆   输入文件:transport.in   输出文件:transport.out   简单对比时间限制:3 s   内存限制:256 MB [题 ...

  9. noip推荐系列:遥控车&lbrack;字符串&plus;高精&plus;二分答案&rsqb;

    [问题描述] 平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i].韵韵早就迫不及待地想玩名字是s的遥控车.可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀( ...

随机推荐

  1. PMO是什么?如何与其他部门协作配合提高项目成功率?

    许多公司里,有许多IT项目,特别是在软件公司里,许多开发团队并没有运用灵敏开发来进行项目办理.在某些状况下,尤其在一些公司里IT不是很受注重的,只能作为一个事务支撑部分,灵敏团队面对的首要疑问,是缺少 ...

  2. Intent学习笔记

    Intent首先字面意思大概是意图.负责activity之间或者,activity与service等(我只知道这么点)之间信息的传递.就跟快递员起的作用差不多(我这这么理解),由一下六部分组成: Co ...

  3. apache磁盘缓存配置

    确保mod_cache和mod_disk_cache是开启的 配置如下: CacheDefaultExpire 86400 #失效时间,单位秒CacheEnable disk /      #缓存路径 ...

  4. Tram---poj1847(简单最短路)

    题目链接:http://poj.org/problem?id=1847 题意:给了N个交叉口,每个交叉口有自己能转到的交叉口. 注意这里:First number in the i-th line, ...

  5. org&period;apache&period;ibatis&period;reflection&period;ReflectionException

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...

  6. 几个MVC属性

    1   用于显示提示字符串 [Required(ErrorMessage="请输入类型名称")] public string ArticleTypeName { get; set; ...

  7. MySQL中整型数据的差别

    bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. P.S. b ...

  8. 【基础】26个命令玩转linux,菜鸟及面试必备

    1 查看目录与文件:ls #显示当前目录下所有文件的详细信息 ls -la 2 切换目录:cd #切换当前目录为/opt/test cd /opt/test 3 显示当前目录:pwd pwd 4 创建 ...

  9. 打Patch实践

    一.找到相应PATCH 确认系统已安装模块版本. SELECTapp.application_short_name, app.application_name, pi.patch_level   FR ...

  10. Linux常用监控命令简介 – vmstat,ps&comma;free&comma;uptime 等

    vmstat [-a] [-n] [delay [ count]]vmstat [-f] [-s] [-m]vmstat [-S unit]vmstat [-d]vmstat [-p disk par ...