cf 801c Voltage Keepsake


题意:

给你n个装置,每个装置每分钟耗电p  ,本身储存电c。

然后你有一个充电器,(随时充,转移不耗时,想怎么换着充都行)。

问你让所有装置都能保持工作的最大时间是多少。


题解: 

二分枚举最长时间:


我写的时候因为粗心,被hink了,睡的早,每发现, 其中遇见了两个问题,第一,R的上限,我开到了1e9,  当时没仔细想,最后换成1e18;

第二个问题,储存所有装置的P的和的变量S 我用的 int 。。s超界导致出现出现-1.

写题太粗心。


#include

using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int maxn = 111115;
int n, m;
struct node{
    int p,c;
    double t;
}a[maxn];
int main() {
    scanf("%d %d",&n,&m);
    long long sum=0;
    for(int i=1;i<=n;++i){
        scanf("%d %d",&a[i].p,&a[i].c);
        a[i].t=a[i].c*1.0/a[i].p;
        sum+=a[i].p;
    }
    if(m>=sum) {printf("-1\n");return 0;}
    double l=0.0000001,r=1e18;
    while(r-l>=0.0000001){
        double mid=(l+r)/2;
        double s=0;
        for(int i=1;i<=n;++i){
            if(a[i].tm*mid) r=mid-0.0000001;
        else l=mid+0.0000001;
    }
    printf("%lf",l);
    return 0;
}


你可能感兴趣的:(codeforces,二分)