题目描述
直接二分 , 找右边界
样例
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 100010;
ll a[N] , b[N];
int n , m ;
bool ok (int x )
{
ll k = m;
for(int i = 1; i <= n; i++)
{
if( a[i] * x > b[i])
{
k -= (ll) a[i] * x - b[i];
if(k < 0) return false;
}
}
return true;
}
int main()
{
cin>>n>>m;
for(int i = 1; i <= n; i++) cin>>a[i];
for(int i = 1; i <= n; i++) cin>>b[i];
int k = 0;
ll l = 0 , r = 2e9+10;
while (l < r)
{
ll mid = (l+r+1) / 2 ;
if(ok (mid)) l = mid;
else r = mid -1;
}
cout<<r<<endl;
return 0;
}```
----------
### 算法1
##### (暴力枚举) $O(n^2)$
blablabla
#### 时间复杂度
#### 参考文献
#### C++ 代码
blablabla
----------
### 算法2
##### (暴力枚举) $O(n^2)$
blablabla
#### 时间复杂度
#### 参考文献
#### C++ 代码
blablabla
```