题意:

  有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. POJ 3660 Cow Contest(Floyd求传递闭包(可达矩阵))

    Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16341   Accepted: 9146 Desc ...

  2. 半导体热阻问题深度解析(Tc,Ta,Tj,Pc)

    半导体热阻问题深度解析(Tc,Ta,Tj,Pc) 本文是将我以前的<有关热阻问题>的文章重新梳理,按更严密的逻辑来讲解. 晶体管(或半导体)的热阻与温度.功耗之间的关系为: Ta=Tj-* ...

  3. 编写Linux脚本

    下面是重新启动Linux下某进程的shell脚本.以tomcat进程为例: #!/bin/sh pid=`ps -ef|grep tomcat|grep -v grep|awk '{print $2} ...

  4. Centos7-安装Gradle4.10

    1.下载 官方安装文档:https://gradle.org/install/ 官方下载地址:http://services.gradle.org/distributions/gradle-4.10- ...

  5. [POI2007]旅游景点atr BZOJ1097

    分析: 我们可以考虑,因为我们必须经过这些节点,那么我们可以将它状压,并且我们因为可以重复走,只是要求停顿前后,不要求遍历前后,那么我们之间存一下点与点之间的最短路,之后每次转移一下就可以了. f[i ...

  6. Python3入门(五)——高级特性

    一.切片 对于取指定索引的值,python提供了切片来简化傻傻的循环 list2 = ["apple", "water", "banana" ...

  7. c# 菜鸟包裹查询

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  8. 浅谈Objeact.clone克隆(纯个人理解,如有错误请指正)

    现在先来看一下jdk给出的Object.clone源码和注释 /** * Creates and returns a copy of this object. The precise meaning ...

  9. JAVA 静态方法和实例方法的区别 (图表)

    静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这 ...

  10. python面试题(四)

    一.数据类型 1.字典 1.1 现有字典 dict={‘a’:24,‘g’:52,‘i’:12,‘k’:33}请按字典中的 value 值进行排序? sorted(dict.items(),key=l ...