AcWing 5562. 最大生产
原题链接
中等
作者:
φ_2
,
2024-03-31 00:25:26
,
所有人可见
,
阅读 2
二分
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int n, k;
const int INF = 2e9 + 1;
const int N = 100010;
vector<int> a(N), b(N);
bool check(long long mid)
{
long long num = 0;
for (int i = 1; i <= n; ++i)
{
long long need = mid * a[i];
if (need > b[i])
num -= b[i] - need;
if (num > k)
return false;
}
return num <= k;
}
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; ++i)
cin >> a[i];
for (int i = 1; i <= n; ++i)
cin >> b[i];
long long l = 0, r = INF;
while (l < r)
{
long long mid = l + r + 1 >> 1;
if (check(mid))
l = mid;
else
r = mid - 1;
}
cout << l << endl;
return 0;
}