求救!4 15 16 19 20WA!
查看原帖
求救!4 15 16 19 20WA!
1577368
rimu39楼主2024/12/7 00:27
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
struct dip
{
	double in;
	double out;
};
int main()
{
	double n, p;
	scanf_s("%lf%lf", &n, &p);
	dip arr[10002];
	double maxx = 0, minn = 1000000000, mun = 0;
	for (int x1 = 0; x1 < n; x1++) 
	{
		scanf_s("%lf%lf", &arr[x1].in, &arr[x1].out);
		maxx=max(maxx, arr[x1].out / arr[x1].in);
		minn=min(minn, arr[x1].out / arr[x1].in);
		mun += arr[x1].in;
	}
	if (mun <= p) { printf("-1"); return 0; }
	double left = minn, right = maxx;
	double best = 0;
	while (right-left>1e-6)
	{
		double mid = (right + left) / 2;
		double mh = 0;
		for (int x2 = 0; x2 < n; x2++)
		{
			
			double h = arr[x2].out / arr[x2].in;
			if (h<mid)
			{
				mh += (mid - h) * arr[x2].in;
			}
		}
		if (mh - mid * p <=1e-6 )
		{
			best = mid;
			left = mid + 1e-6;
		}
		else { right = mid - 1e-6;	 }
	}
	printf("%lf", best);
	return 0;
}
2024/12/7 00:27
加载中...