Voltage Keepsake CodeForces - 801C(思维)
题意:
有n台机器,第i台机器每个单位时间消耗ai的功率,初始有bi的功率储备,有一个充电器每个单位时间充p单位的功率
问经过多长时间才能有一个功率位0的机器,如果能够无限使用输出-1;
解析:
时间是实数范围内,所以可以在任何时刻 给任何一个机器充电
所以如果p >= sum(a1 + a2 + a3 + ``` + an) 则能无限使用
如果不能无限使用 那么给所有的机器在不充电的情况下以初始能用多长时间从小到大排序
那么我们首先肯定要给使用时间最小的机器充电,使它用的时间能够大于等于时间第二小的机器
如果大于等于了。。。那是不是就要考虑 这两个机器的使用时间 看看能否让它们的使用时间大于等于使用时间第三小的机器 以此类推
如果到了某个机器不符合了 那么使用时间就为t当前机器 + X (其中X为在供不应求的情况下还能用多长时间)
X = pow /(double) (x_p - p) (其中pow为累计的多余功率, x_p为满足当前机器后每单位时间的消耗功率, p是每单位的充电量)
x_p 每次累加a就好了(如果可以到达当前机器的时间)
那pow怎么求。。。。。
pow += (Node[i+1].t - Node[i].t) * (p - x_p) 就是加上一段时间里充的 减去 消耗的和 每次累加
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+, INF = 0x7fffffff;
typedef long long LL;
int n, m, p;
struct node
{
int a, b;
double t;
}Node[maxn]; double cmp(node x, node y)
{
return x.t < y.t;
} int main()
{
cin >> n >> p;
LL sum = ;
for(int i=; i<n; i++)
{
cin >> Node[i].a >> Node[i].b;
Node[i].t = Node[i].b / (double)Node[i].a;
sum += Node[i].a;
}
if(p >= sum)
return puts("-1"), ;
sort(Node, Node+n, cmp); double pow = Node[].t * p, x_p = Node[].a;
double ret = ;
int i, flag = ;
for(i=; i<n-; i++)
{
if(pow + (Node[i+].t - Node[i].t) * p > (Node[i+].t - Node[i].t) * x_p)
pow += (Node[i+].t - Node[i].t) * (p - x_p), x_p += Node[i+].a;
else
{
ret = pow /(double) (x_p - p);
flag = ;
break;
}
}
if(!flag)
ret = pow /(double) (x_p - p);
if(n == )
ret = pow /(double) (x_p - p);
ret += Node[i].t;
printf("%.10f\n", ret); return ;
}
Voltage Keepsake CodeForces - 801C(思维)的更多相关文章
- Voltage Keepsake CodeForces - 801C (贪心 || 二分)
C. Voltage Keepsake time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Voltage Keepsake CodeForces - 801C (思维+二分)
题目链接 这是一道很棒的二分题. 思路: 首先先思考什么情况下是可以无限的使用,即输出-1. 我们思考可知,如果每一秒内所有设备的用电量总和小于等于充电器每秒可以充的电,那么这一群设备就可以无限使用. ...
- Codeforces Round #409 C. Voltage Keepsake(二分+思维)
题目链接:http://codeforces.com/contest/801/problem/C 题意:给出一个充电器每秒钟充p个点,还有n个电器要同时使用a[i]表示第i个电器每秒钟用多少点,b[i ...
- Codeforces 801C - Voltage Keepsake
C. Voltage Keepsake 题目链接:http://codeforces.com/problemset/problem/801/C time limit per test 2 second ...
- Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) C Voltage Keepsake
地址:http://codeforces.com/contest/801/problem/C 题目: C. Voltage Keepsake time limit per test 2 seconds ...
- Codeforces801C Voltage Keepsake 2017-04-19 00:26 109人阅读 评论(0) 收藏
C. Voltage Keepsake time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces 801C Voltage Keepsake(二分枚举+浮点(模板))
题目链接:http://codeforces.com/contest/801/problem/C 题目大意:给你一些电器以及他们的功率,还有一个功率一定的充电器可以给这些电器中的任意一个充电,并且不计 ...
- 【codeforces 801C】Voltage Keepsake
[题目链接]:http://codeforces.com/contest/801/problem/C [题意] 有n个设备 你想同时使用 第i个设备每分钟消耗ai点电量,一开始有bi点电量 你有一个充 ...
- Codeforces 772A Voltage Keepsake - 二分答案
You have n devices that you want to use simultaneously. The i-th device uses ai units of power per s ...
随机推荐
- android强制关闭软键盘代码
InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); imm.t ...
- ceph 部署步骤和原理理解
1.ceph的官方源在国外,网速比较慢,此处添加ceph源为阿里源(每个节点上均执行) vim /etc/yum.repos.d/ceph.repo [Ceph] name=Ceph packages ...
- 20155224 聂小益 《基于Arm实验箱的接口测试和应用》 课程设计报告
一.设计方案及可行性分析 熟悉 Linux 开发环境 多线程应用程序设计 串行端口程序设计 中断实验 二.详细设计思路 1. 熟悉 Linux 开发环境 建立工作目录: 在终端输入代码建立工作目录 [ ...
- Hiberante持久化对象的3种状态
近日一同事问我关于Hibernate中对象的3种状态的问题,因此特意总结一下.在Hibernate中对象是有以下3中状态: 瞬时态(transient object): 没有OID值,没有被s ...
- EasyUI-Tree的使用
在web开发中,树是比较常见的东西.以前用过zTree,也用过EasyUI-Tree,过了好久后发现都忘记怎么用了. 这几天重新回顾了EasyUI-tree的使用,在此将相关知识点记录 ...
- springboot redis 监听过期key值事件
redis 中的key值过期后,触发通知事件 1.创建springboot工程,创建监听类 maven配置 <dependencies> <dependency> <gr ...
- Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
目录 上篇回顾 Building Queries 匹配所有的查询 全文查询 Full Text Queries 什么是全文查询? Match 全文查询 API 列表 基于词项的查询 Term Term ...
- 4字节emoji表情对应的Unicode编码获取和编码转换
GitHub Flavored Markdown 今天研究了一天Markdown移动端和pc端统一实现方式,由于以前有搞过移动端富文本编辑器,搞Markdown简单多了: 其中GFM的表情语法不错,比 ...
- Maven构建项目速度太慢的解决办法
问题描述 通过idea新建maven项目,参数设置好后,idea自动构建maven项目时,速度很慢. 参数设置如图: 执行时间如下图: Total time为8:49,花了将近十分钟时间. 连续尝试了 ...
- 基于HTTPS的中间人攻击-BaseProxy
前言 在上一篇文章BaseProxy:异步http/https代理中,我介绍了自己的开源项目BaseProxy,这个项目的初衷其实是为了渗透测试,抓包改包.在知识星球中,有很多朋友问我这个项目的原理及 ...