社区讨论

求助求助

学术版参与者 3已保存回复 12

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
12 条
当前快照
1 份
快照标识符
@lo7v9a43
此快照首次捕获于
2023/10/27 08:19
2 年前
此快照最后确认于
2023/10/27 08:19
2 年前
查看原帖
p3747题目求助 删去while语句中的输出答案会出错 但是加上就会对掉 题目传送门
CPP
#include<bits/stdc++.h>
using namespace std;
int n,p ;//ct;
struct node{
	double a,b;
}num[100086];
bool check(double mid)
{
	double tim;
	for(int i=1;i<=n;i++)
	if((num[i].a*mid>num[i].b)&&(num[i].a*mid-num[i].b>=0)) tim+=(num[i].a*mid-num[i].b)/p;
	//cout<<tim<<" std"<<endl;
	return tim>=mid;
}
int main()
{
	cin>>n>>p;
	for(int i=1;i<=n;i++) cin>>num[i].a>>num[i].b;
	if((n==1)&&(num[1].a<=p)&&(num[1].b>0))
	{
		cout<<"-1";
		return 0;
	}
	double l=0;
	double r=1e7;
	while(r-l>=1e-10)
	{
		double mid=(l+r)/2;
		if(check(mid)) r=mid;
		else l=mid;
	//	cout<<l<<" "<<r<<endl;
	}
	//cout<<l;
//	cout<<l<<" "<<r<<endl;
//	cout << l << endl;
	printf("%.10lf",l);
//	cout << endl << ct;
	return 0;
}

回复

12 条回复,欢迎继续交流。

正在加载回复...