题目链接:点击查看

题目大意:给出n个电器,每个电器每秒钟都需要消耗一定的能量,每个电器初始时储存了一定的能量,现在有一个充电器,可以给任意一个电器充电,问这n个电器最多能运行多久

题目分析:看到这个题目我们可以二分电器运行的时间,但一开始我不太会写判断条件,去网上搜了一下之后才知道该怎么做的。。还是得多做点题才能解锁更多的做题姿势

简单说一下,这个题目是个浮点数的二分题目,然后我们每次二分的mid的意义在这个题目中代表了运行时间,那么我们就可以枚举每个电器,计算一下该电器运行到目前为止所需要消耗的能量,如果该能量比其储存的能量小,那么可以直接跳过,如果该能量比其储存的能量要大,那么就需要充电器进行充电,计算一下充电器需要在该电器上冲多久的电,最后用充电器所需要充电的时间和当前时间比较一下就能表示check函数了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e5+100;const double eps=1e-6;int cost[N],power[N];int main()
{
//  freopen("input.txt","r",stdin);int n,p;scanf("%d%d",&n,&p);LL sum=0;for(int i=1;i<=n;i++){scanf("%d%d",cost+i,power+i);sum+=cost[i];}if(sum<=p)return 0*printf("-1\n");double l=0,r=1e18;while(fabs(l-r)>eps){double mid=(l+r)*0.5;//能坚持多久 double cnt=0;for(int i=1;i<=n;i++)if(mid*cost[i]>power[i])cnt+=(mid*cost[i]-power[i])/p;//计算所需要的充电时间 if(cnt>mid)r=mid;elsel=mid;}printf("%.5f\n",l);return 0;
}

CodeForces - 801C Voltage Keepsake(二分)相关推荐

  1. 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 ...

  2. Voltage Keepsake CodeForces - 801C (思维+二分)

    题目链接 这是一道很棒的二分题. 思路: 首先先思考什么情况下是可以无限的使用,即输出-1. 我们思考可知,如果每一秒内所有设备的用电量总和小于等于充电器每秒可以充的电,那么这一群设备就可以无限使用. ...

  3. 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 ...

  4. Codeforces Round #409 (Div. 2) C Voltage Keepsake(二分)

    题意:有n(n<=100000)个机器...第i个机器最开始有bi(1<=bi <= 100000)个单位的电量,机器可以储存的电量没有上限,启动后每秒消耗ai(1<=ai&l ...

  5. Codeforces 685C Optimal Point (二分、不同类型距离的相互转换)

    题目链接 https://codeforces.com/contest/685/problem/C 题解 我怎么又还差最后一步的时候放弃了然后往别的方向上想了一小时才发现这个思路能做-- 首先二分答案 ...

  6. CodeForces - 1538G Gift Set(二分)

    题目链接:点击查看 题目大意:给出 a,b,x,ya,b,x,ya,b,x,y,分别表示有 aaa 个蓝色糖果和 bbb 和红色糖果,现在有两种打包方式: xxx 个蓝色糖果和 yyy 个红色糖果 y ...

  7. Success Rate CodeForces - 807C (数学+二分)

    You are an experienced Codeforces user. Today you found out that during your activity on Codeforces ...

  8. Codeforces - 706B - Interesting drink - 二分 - 简单dp

    https://codeforces.com/problemset/problem/706/B 因为没有看见 $x_i$ 的上限是 $10^5$ ,就用了二分去做,实际上这道题因为可乐的价格上限是 $ ...

  9. codeforces数学1700[CodeForces 1336B[分类讨论+二分]CodeForces - 1301C[组合计数的减法原理]]

    CodeForces 1336B Xenia and Colorful Gems 题目大意:给你nrn_rnr​个xix_ixi​,ngn_gng​个yiy_iyi​,nbn_bnb​个ziz_izi ...

最新文章

  1. arcgiss如何在空白点图层加入坐标_连载 | 21 QGIS工程文件属性设置(2)——坐标参照系、变换、默认样式、数据源、关系和变量...
  2. 数据中台推荐系统入门(三):推荐系统的评测指标
  3. VC++中的char,wchar_t,TCHAR(转载)
  4. boost::mpi模块非阻塞点对点操作的测试
  5. 硅谷公司:我们称他们为软件工程师,而非打工人
  6. XYGame-AI设计3-行为树-第1版本
  7. andriod搭建自己的轮询框架
  8. iOS开发UI篇—Button基础
  9. aws搭建深度学习gpu_选择合适的GPU进行AWS深度学习
  10. 织梦php模板安装教程,dedecms织梦网整站模板通用安装教程(图文)
  11. 《日语综合教程》第七册 第四課 読み物 初日影のなかで
  12. 车载微信助手,网页微信开发回顾
  13. strcpy()的使用注意事项
  14. 论文阅读 6 | Bayesian Meta-Learning for the Few-Shot Setting via Deep Kernels
  15. ACM--South Pacific 2012
  16. sim900芯片—GPRS使用C语言接电话和收短信应用程序
  17. 面向对象语法1—基础
  18. 数据结构实验一,第2题:基于顺序存储结构的图书信息表的排序
  19. usb/uart转网口模块选型设计 小结
  20. 明明白白HOB hand-off Block

热门文章

  1. SpringSecurity使用自定义认证页面
  2. 认识微服务-SpringCloud
  3. Quartz框架中的Scheduler
  4. 类的加载连接和初始化
  5. 获取class文件对象的三种方式
  6. 权限操作-springSecurity快速入门-使用自定义页面
  7. SpringBoot异常处理-SimpleMappingExceptionResolver
  8. 多线程——线程的生命周期
  9. Spring-- ApplicationContext
  10. mysql insert 语句优化_分享insert into语句优化的小技巧