二分错了3个测试点求条
查看原帖
二分错了3个测试点求条
891150
403notfound楼主2024/10/11 07:17
#include <queue>
#include <bits/stdc++.h>
#define ll long long
#define int ll
#define se second
#define fi first
using namespace std;
ll const N = 1e2 + 10 , mod = 19940417;
ll n , x , a[N] , b[N] , p[N] , q[N];
bool check(ll k){
	ll tot = 0;
	for (int i = 1;i <= n;i ++){
		if (a[i] / 1.0 / p[i] < b[i] / 1.0 / q[i]) swap(a[i] , b[i]) , swap(p[i] , q[i]);
		ll minn = 1e18;
		for (int j = 0;j <= 100 && b[i] * j <= k;j ++){
			ll ak = ceil((k - j * b[i]) / 1.0 / a[i]);
			minn = min(minn , ak * p[i] + j * q[i]);
		}
		tot += minn;
	}
	return x >= tot;
}
signed main(){
	ios::sync_with_stdio(false);
	cin >> n >> x;
	for (int i = 1;i <= n;i++) cin >> a[i] >> p[i] >> b[i] >> q[i];
	ll l = 1 , r = 1e9 + 10 , mid , ans = 0;
	while (l <= r){
		mid = (l + r) / 2;
		if (check(mid)){
			l = mid + 1;
			ans = mid;
		}
		else r = mid - 1;
	}
	cout << ans << "\n";
	return 0;
}
/*
1 2 3 4 5
*/
2024/10/11 07:17
加载中...