题意:

  有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(思维)的更多相关文章

  1. Voltage Keepsake CodeForces - 801C (贪心 || 二分)

    C. Voltage Keepsake time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

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

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

  3. Codeforces Round #409 C. Voltage Keepsake(二分+思维)

    题目链接:http://codeforces.com/contest/801/problem/C 题意:给出一个充电器每秒钟充p个点,还有n个电器要同时使用a[i]表示第i个电器每秒钟用多少点,b[i ...

  4. Codeforces 801C - Voltage Keepsake

    C. Voltage Keepsake 题目链接:http://codeforces.com/problemset/problem/801/C time limit per test 2 second ...

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

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

  7. Codeforces 801C Voltage Keepsake(二分枚举+浮点(模板))

    题目链接:http://codeforces.com/contest/801/problem/C 题目大意:给你一些电器以及他们的功率,还有一个功率一定的充电器可以给这些电器中的任意一个充电,并且不计 ...

  8. 【codeforces 801C】Voltage Keepsake

    [题目链接]:http://codeforces.com/contest/801/problem/C [题意] 有n个设备 你想同时使用 第i个设备每分钟消耗ai点电量,一开始有bi点电量 你有一个充 ...

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

随机推荐

  1. sql语句之表间字段值复制遇到的一些问题--基于mysql

    好久没来园子了,转眼2017已经到3月份了,前段时间一直忙没时间写博客(其实是自己懒),感觉内心好惭愧.昨天临下班前,技术老大突然对我说要改下表结构,问我能不能实现将一个表的字段值复制到另外一个表的某 ...

  2. Linux CentOS7系统中phpMyAdmin安装配置

    今天介绍的是如何在Linux CentOS7系统中配置phpMyAdmin. 目录 环境准备 安装包 基本设置 网站预览 环境准备 linux centos7系统 ssh软件 php语言环境 mysq ...

  3. Delphi DBGrid类控件定位到某一行,并更改为选中状态。

    Delphi中,可以使用数据集控件提供的 Locate 成员方法快速定位至某条记录, 然后通过清除数据集控件的选中状态,并重新赋值达到我们的目的. grDirectory.DataSource.Dat ...

  4. mysql存储blob限制

    一.Mysql存储类型分类: 1.blob:二进制大对象(字节流),可以用来存储图片.视频等,没有字符集的说法 2.text:文本大对象(字符流),存储大型字串,有字符集的说法 3.二者使用时不能指定 ...

  5. EZ 2018 04 21 NOIP2018 模拟赛(十) -LoliconAutomaton的退役赛

    难得的一次Unrated,避免了重回1500的尴尬 其实题目都还可以,但只不过所有人T1都炸了,可能是数据的锅(假的) 而且我因为T1SB的把T2弃了,没想到是千年水题 T3莫名爆炸,然后TM的40分 ...

  6. GBDT源码剖析

    如今,GBDT被广泛运用于互联网行业,他的原理与优点这里就不细说了,网上google一大把.但是,我自认为自己不是一个理论牛人,对GBDT的理论理解之后也做不到从理论举一反三得到更深入的结果.但是学习 ...

  7. 【php增删改查实例】第四节 -自己 DIY 一个数据库管理工具

    本节介绍如何自己DIY一个数据库管理工具,可以在页面输入sql 进行简单的增删改查操作. 首先,找到xampp的安装目录,打开htdocs: 新建一个php文件,名称为 mysqladmin.php ...

  8. Scala学习(二)练习

    Scala控制结构和函数&练习 1. 一个数字如果为正数,则它的signum为1:如果是负数,则signum为-1:如果为0,则signum为0:编写一个函数来计算这个值 简单逻辑判断: 测试 ...

  9. flask之jinjia2模板(二)

    1.1.模板传参 (1)主程序 from flask import Flask,render_template app = Flask(__name__) @app.route('/') def he ...

  10. 微信小程序初体验与DEMO分享

    前言 前一段时间微信公布小程序,瞬间引来了大量的关注.博主的公司也将其定为目标之一,遂派本菜为先头兵(踩坑侠). 这次开发了一个比较完整的DEMO,模仿自某个APP首页,由于保护隐私的目的我把数据拷贝 ...