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 push_back
#define ll long long
#define PI 3.14159265
#define eps 1e-7
using namespace std;
const int maxn=1e5+5;
int n,tmp1,p;
int a[maxn],b[maxn];
bool judge(double t)
{
	double q=0.0;
	for(int i=0;i<n;i++)
	{
		if(a[i]*t>b[i])
		{
			q+=(a[i]*t-b[i])/p;
		}
	}
	return q<=t;
}
int main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>p;
	ll sum=0;
	for(int i=0;i<n;i++)
	{
		cin>>a[i]>>b[i];
		sum+=a[i];
	}
	if(p>=sum)
	{
		cout<<-1<<'
';return 0;
	}
	double l=0.0,r=1e13+7;
	while(r-l>eps)
	{
		double mid=(r+l)/2;
		if(judge(mid))
		{
			l=mid;
		}
		else
		{
			r=mid;
		 } 
	}
	cout<<(l+r)/2<<endl;
	return 0;
 } 
原文地址:https://www.cnblogs.com/lhclqslove/p/7710618.html