NOIP模拟:能源(二分答案)
题目描述
小美为了拯救世界能源危机,她准备了 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模拟:能源(二分答案)的更多相关文章
- 主席树/线段树模拟归并排序+二分答案(好题)——hdu多校第4场08
用主席树写起来跑的快一点,而且也很傻比,二分答案,即二分那个半径就行 主席树求的是区间<=k的个数 #include<bits/stdc++.h> using namespace s ...
- NOIP模拟 Work - 二分 + 树状数组 / ???
题目分析 如果没有最后的注意事项,此题就是二分裸题.有了注意事项,会有两种思路: 在线:二分天数t,并在主席树上求1~t天中大于d(浪费的时间)的时间之和以及数量,答案即为:sum - d * cnt ...
- 【noip模拟赛6】收入计划 最大值的最小值 二分答案
描述 高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱.从今天起,Matrix67将连续工作N天(1<=N<=100 000).每一天末他可以领取当天及前面若干天里没有领取的工 ...
- [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告
[NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...
- 2018.10.14 NOIP训练 直线(二分答案+st表+切比雪夫距离转化)
传送门 二分答案好题. 这已经是当年普及组模拟时挖的坑了233. 这道题还是很不错的. 考虑把坐标系转个45度再操作. 为了不爆精度可以直接转切比雪夫距离. 然后就直接二分答案. 其中竖线就按二分的答 ...
- [NOIP提高&洛谷P1024]一元三次方程求解 题解(二分答案)
[NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约 ...
- 疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)
P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...
- cogs 2109. [NOIP 2015] 运输计划 提高组Day2T3 树链剖分求LCA 二分答案 差分
2109. [NOIP 2015] 运输计划 ★★★☆ 输入文件:transport.in 输出文件:transport.out 简单对比时间限制:3 s 内存限制:256 MB [题 ...
- noip推荐系列:遥控车[字符串+高精+二分答案]
[问题描述] 平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i].韵韵早就迫不及待地想玩名字是s的遥控车.可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀( ...
随机推荐
- Sqlmap注入Base64编码的注入点
不小心删了,找快照才找到的.补回来... 上次遇到一个Base64的注入点,手工注入太麻烦,于是在网上看了一下sqlmap Base64注入的方法,如下: sqlmap -u http://xxxx. ...
- 每天一个JS 小demo之留言板。主要知识点:DOM方法的理解和运用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- LinCode 刷题 之二叉树最小深度
http://www.lintcode.com/zh-cn/problem/minimum-depth-of-binary-tree/ 题目描述信息 /** * Definition of Tree ...
- nginx+ftp搭建图片服务器(Windows Server服务器环境下)
几种图片服务器的对比 1.直接使用ftp服务器,访问图片路径为 ftp://账户:密码@192.168.0.106/31275-105.jpg 不采用这种方式,不安全容易暴露ftp账户信息 2.直接使 ...
- LogMiner的使用
LogMiner是用于Oracle日志挖掘的利器. 百科解释: LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重做日志文件(归 ...
- PHP数组按引用传递
<?php /**PHP数组按引用传递**/ $arr = array( array('id' => 1, 'name' => 'name1'), array('id' => ...
- 很好的复习资料: SQL语句到底怎么写 ?
本文用到的数据库如下: CREATE DATABASE exam; /*创建部门表*/ CREATE TABLE dept( deptno INT PRIMARY KEY, dname VARCHAR ...
- JavaScript学习笔记(三)——留言板知操纵DOM节点
用JavaScript写了一个简易的留言板,暂不涉及数据库接入等. 1.功能以及流程 主要功能即为留言,用两个文本框接受用户输入的用户名以及留言内容,然后通过"提交留言"按钮将用户 ...
- java基础(9) - 泛型解析
泛型 定义简单的泛型类 泛型方法 /** * 1.定义一个泛型类 * 在类名后添加类的泛型参数 <T> * 泛型类里面的所有T会根据创建泛型类时传入的参数确定类型 * 2.定义泛型方法 * ...
- APP测试点归纳
1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即 15个工作日), 根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先向主管确认项目排期. 1.3测试资源 ...