二分答案 TLE 了
查看原帖
二分答案 TLE 了
360331
int64楼主2021/9/5 08:20
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<iomanip>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);

using namespace std;

#define inf 0x3f3f3f3f
#define endl '\n'

const int maxn = 100010;
const double eps = 1e-8;

int n;
double a[maxn], b[maxn], sum;
double p;

bool check(double mid) {
	double amt = 0.0;
	for (int i = 0;i < n;i++) {
		amt += max(a[i] * mid - b[i], 0.0);
	}
	if (amt > p * mid) {
		return true;
	}
	else {
		return false;
	}
}

signed main() {
	IOS;
	cin >> n >> p;
	for (int i = 0;i < n;i++) {
		cin >> a[i] >> b[i];
		sum += a[i];
	}
	if (sum <= p) {
		cout << -1 << endl;
		return 0;
	}
	double l = 0, r = 1e10, mid;
	while (r - l > eps) {
		mid = (l + r) / 2;
		if (check(mid)) {
			r = mid;
		}
		else {
			l = mid;
		}
	}
	cout << fixed << setprecision(9) << mid << endl;
	return 0;
}

//Fununugugu Code 

算了一下 log2(1e10)33.2\log_2(1e10)≈33.2,不应该 TLE 呀?

2021/9/5 08:20
加载中...