我不理解。。
查看原帖
我不理解。。
448965
杨丶老爹楼主2021/10/7 22:21

为什么最后只会输出0啊

我中间调试的时候都可以正常二分,但是为什么最后ans是0啊

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=2e5+5;
int n;
long double ans;
struct node{
	int x,y,s;
}pos[N];
bool check(long double mid)
{
	long double sum=0;
	for(int i=1;i<=n;i++)
	{
		sum+=(long double)pos[i].s/mid;
		if(sum>pos[i].y) return false;
		if(sum<pos[i].x) sum=pos[i].x;
	}
	return true;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d%d",&pos[i].x,&pos[i].y,&pos[i].s);
	}
	long double l=0,r=1e9;
	while(r-l>=0.00001)
	{
		long double mid=(l+r)/2;
		if(check(mid))
		{
			r=mid;
			ans=mid;
//			printf("%lf\n",ans);
		}
		else l=mid;
	}
	printf("%.2lf",ans);
	return 0;
}
2021/10/7 22:21
加载中...