UVA1753 Need for Speed题解

发布题解便于我日后复习二分用 顺便水下咕值

 看到这道题,根据题意我们能很快找到c与时间t和d[i],s[i]的关系,然后呢? 

然后不会了 于是就想到了二分答案 二分枚举,一直靠近答案为止 代码有注释

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
double d[100000],s[100000];
int n,t;
bool check(double x){
double sum=0;
for(register int i=1;i<=n;i++){
    double m=s[i]+x;//算出枚举出来的速度
       if(m<=0)return 0;//速度总不可能小于0吧                        
sum+=d[i]/m;//累加时间
}
if(sum<=t)return 1;//如果时间小于总时间,可行
else return 0;
}
int main(){
int i,j;                                                                                                        
while(~scanf("%d%d",&n,&t)){double ans;
double l=-20000000,r=20000000;//枚举左右区间
for(i=1;i<=n;i++)
scanf("%lf%lf",&d[i],&s[i]);
for(i=1;i<=100;i++)
{
double mid=(l+r)/2;
if(check(mid)){
ans=mid;
r=mid;//如果答案可行,储存
}
else l=mid;
}
printf("%.9lf\n",ans);
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/zw130-lzr-blogs/p/10945723.html
今日推荐