最大值的取值为何会影响结果
查看原帖
最大值的取值为何会影响结果
1037870
jianxing04楼主2024/1/9 16:14

这种写法只得95

#include<bits/stdc++.h>
using namespace std;
int n,p,a[100009],b[100009];
long long sum=0;
int F(double x)
{
	double tem=0;
	for (int i=1;i<=n;i++)
	{
		if (a[i]*x>b[i])
		{
			tem+=(a[i]*x-b[i])/x;
		}
		if (tem>p)
		{
			break;
		}
	}
	return tem<=p;
}
int main()
{
	cin>>n>>p;
	for (int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i],&b[i]);
		sum+=a[i];
	}
	if (sum<=p)
	{
		cout<<"-1";
		return 0;
	}
	double ans=0,l=0,r=0x7fffffff,mid=(r-l)/2+l;
	while(l<=r)
	{
		if (F(mid))
		{
			l=mid+0.00001;
			ans=mid;
		}
		else
		{
			r=mid-0.00001;
		}
		mid=(r-l)/2+l;
	}
	printf("%.10lf",ans);
	return 0;
}

这里用0x7fffffff来初始化r,第19个测试点无法通过,但是改成2e10就过了 如下

#include<bits/stdc++.h>
using namespace std;
int n,p,a[100009],b[100009];
long long sum=0;
int F(double x)
{
	double tem=0;
	for (int i=1;i<=n;i++)
	{
		if (a[i]*x>b[i])
		{
			tem+=(a[i]*x-b[i])/x;
		}
		if (tem>p)
		{
			break;
		}
	}
	return tem<=p;
}
int main()
{
	cin>>n>>p;
	for (int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i],&b[i]);
		sum+=a[i];
	}
	if (sum<=p)
	{
		cout<<"-1";
		return 0;
	}
	double ans=0,l=0,r=2e10,mid=(r-l)/2+l;
	while(l<=r)
	{
		if (F(mid))
		{
			l=mid+0.00001;
			ans=mid;
		}
		else
		{
			r=mid-0.00001;
		}
		mid=(r-l)/2+l;
	}
	printf("%.10lf",ans);
	return 0;
}

这是为何

2024/1/9 16:14
加载中...