P1542 包裹快递

题目

P1542 包裹快递_第1张图片

思路

二分题都这么细的吗
比较简单的二分题
首先,速度要尽量快,也就是说时间要尽量早(因为可以等)
所以直接二分速度模拟送快递过程,如果是迟到的话就肯定是不行的,若是等于或者小于就等到x

代码

#include
using namespace std;
#define int long long
const int maxn=2e5+5;
const double eps=1e-5;
int n;
int x[maxn],y[maxn],s[maxn];
double ans;
bool check(double v){
	long double t=0.0;
	for(int i=1;i<=n;i++){//模拟
		t+=s[i]/v;//路程/速度=时间
		if(t>y[i]) return false;//迟到
		if(t<x[i]) t=x[i];//早到
	}
	return true;
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>x[i]>>y[i]>>s[i];
	long double l=0.0,r=1e8;
	while(r-l>eps){
		long double mid=(l+r)/2.0;//一定是long double不然WA最后一个点
		if(check(mid)) ans=mid,r=mid;//记录答案
		else l=mid;
	}
	printf("%.2lf",ans);//两位输出
	return 0;
}

你可能感兴趣的:(二分,模拟,c++,算法)