Codeforces Round #409 C. Voltage Keepsake(二分+思维)
题目链接:http://codeforces.com/contest/801/problem/C
题意:给出一个充电器每秒钟充p个点,还有n个电器要同时使用a[i]表示第i个电器每秒钟用多少点,b[i]表示第i个
原来存了都少电。充电器可以无缝切换这充电,但是只能给一个充(同一时间)。最后问你最长可用多久,如果可以
无限时间的用的话,就输出-1。
题解:首先确定一下什么时候输出-1也就是可以无限充电的情况,就是p大于所有a的总和就行。
然后就是时间有限的情况。这里明确一个式子。
need*t=a[i]*t-b[i],(need表示每秒需要的时间,t表示时间)然后for一下1~n
need+=(a[i]-b[i]/t)
如果need<=p那么这个时间就是符合的。
然后就是枚举时间,枚举时间可以用二分,不妨设l=0,r=1e10,mid=(l+r)/2。然后就是二分的次数,由于精度要求是
1e-4所以二分50次左右就够了。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int M = 1e5 + 10;
double a[M] , b[M];
int main() {int n;double p;scanf("%d%lf" , &n , &p);double sum = 0;for(int i = 0 ; i < n ; i++) {scanf("%lf%lf" , &a[i] , &b[i]);sum += a[i];}if(sum <= p) {cout << -1 << endl;}else {double l = 0 , r = 1e10;double mid = (l + r) / 2;for(int j = 1 ; j <= 50 ; j++) {mid = (l + r) / 2;double need = 0;for(int i = 0 ; i < n ; i++) {need += max(0.0 , 1.0 * a[i] - b[i] / mid);}if(need <= p) l = mid;else r = mid;}printf("%.10lf\n" , l);}return 0;
}
转载于:https://www.cnblogs.com/TnT2333333/p/6722021.html
Codeforces Round #409 C. Voltage Keepsake(二分+思维)相关推荐
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)C. Voltage Keepsake
题目链接:C. Voltage Keepsake 题解:二分时间,然后判断看需要充电的时间总和是否在允许的范围内 #include<bits/stdc++.h> #define pb pu ...
- Codeforces Round #409 (Div. 2)
这是一次血崩的cf,脑子不好使了.读题读错...代码写错...查不出错...WAWAWA 这次题比较常规.前二题很简单,第三题二分,第四题数学. A - Vicious Keyboard[暴力模拟] ...
- Codeforces Round #658 (Div. 2) D. Unmerge 思维 + 背包
传送门 文章目录 题意: 思路: 题意: 思路: 我们可以假设有两个桶,让后向里面放数,可以发现,如果向其中放入了aia_iai,那么紧跟在他后面的所有<ai<a_i<ai的数都 ...
- Codeforces Round #619 (Div. 2) E. Nanosoft 思维 + 二维前缀和
传送门 文章目录 题意: 思路: 题意: 思路: 考虑到最大面积是由四种颜色构成的,且四种颜色可以从中心扩展出去,所以我们分别维护四种颜色的二维前缀和,O(1)O(1)O(1)计算矩阵内颜色的个数.现 ...
- Codeforces Round #743 (Div. 2) B. Swaps 思维
题目地址Codeforces Round #743 (Div. 2) B. Swaps 题意很好懂,这里就不复述了. 思路:因为是要让a小于b,所以可以用双指针,在b数组中找到第一个大于a数组中第i个 ...
- Codeforces Round #409 (Div. 2) C Voltage Keepsake(二分)
题意:有n(n<=100000)个机器...第i个机器最开始有bi(1<=bi <= 100000)个单位的电量,机器可以储存的电量没有上限,启动后每秒消耗ai(1<=ai&l ...
- CodeForces - 801C Voltage Keepsake(二分)
题目链接:点击查看 题目大意:给出n个电器,每个电器每秒钟都需要消耗一定的能量,每个电器初始时储存了一定的能量,现在有一个充电器,可以给任意一个电器充电,问这n个电器最多能运行多久 题目分析:看到这个 ...
- CodeForces - 801C Voltage Keepsake 二分
You have n devices that you want to use simultaneously. The i-th device uses ai units of power per s ...
- codeforces 808 E. Selling Souvenirs (dp+二分+思维)
题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...
- Codeforces Round #587 C. White Sheet(思维+计算几何)
传送门 •题意 先给一个白矩阵,再两个黑矩阵 如果两个黑矩阵能把白矩阵包含,则输出NO 否则输出YES •思路 计算几何题还是思维题呢? 想起了上初中高中做几何求面积的题 这个就类似于那样 包含的话分 ...
最新文章
- Halcon初学者知识:用set_paint直观显示图像的属性
- java断言assert初步使用:断言开启、断言使用
- 通过100个单词掌握英语语法(四十四)more
- eclipse插件安装的方法
- 如何设置Linux操作系统shell命令的默认语言
- 不管你挣多少钱永远都是问题
- 寂寞的hasLayout
- 程序员:工作3年了,为啥越来越不值钱……
- SVM支持向量机,我用到的自学材料
- visual studio 2015 2017 key vs2015 vs2017密钥
- 10小时,就能吃透Kafka源码?
- Java爬虫爬取微博热搜榜
- 大数取模运算Barrett reduction
- 字节序——Big Endian和Little Endian
- 算法时间复杂度符号分析——O、o、Ω、ω、Θ
- 游戏ui设计,游戏ui设计需要学什么
- 你知道豆瓣电影是怎么评分的吗?(实战篇—手把手教你分析豆瓣电影)
- vue绑定类名 禁用样式
- ORCALE DDL,DML,DQL命令
- C# WPF动点任意移动气泡画法(解决方案使用到数学勾股定理、正弦定理、向量知识)。