AlvinZH的儿时梦想——机器人篇
时间限制:1000ms 内存限制:65536kb
通过率:19/22 (86.36%)
正确率:19/97 (19.59%)
解析:
先声明pSum所有机器人的总功率,当总功率小于等于充能器功率时,他们就能无限期玩耍了。否则,求解玩耍时间:再0和最大可能时间(10^9)之间进行二分,足够的次数(50)后,输出时间即可。
代码:
#include<cstdio>
#include<cmath>
#define maxn 100007
double a[maxn],b[maxn];
double n,p;
bool check(double t)
{
double now = 0;
for(int i = 0;i < n;i++)
{
if(b[i] < t*a[i])
{
now += t*a[i] - b[i];
}
}
return now < t*p;
}
int main()
{
while(~scanf("%lf%lf",&n,&p))
{
double pSum = 0;
for(int i = 0;i < n;i++)
{
scanf("%lf%lf",&a[i],&b[i]);
pSum += a[i];
}
if(pSum <= p)
{
printf("Great Robot!\n");
continue;
}
double l = 0,r = 1000000000,mid;
for(int i = 1;i <= 50;i++)
{
mid = (l+r) / 2;
if(check(mid))
{
l = mid;
}
else
{
r = mid;
}
}
printf("%.3lf\n",mid);
}
}