我也是二分法,但只过了20%
#include<bits/stdc++.h>
using namespace std;
int n, v[110], idx = 1;
long long m, w[110],min_w, ans;
bool check(long long wi){
int q = 0;
for(int i=1;i<=n;i++){
q += (wi - w[i])*v[i];
if (q>m)return false;
}
return true;
}
int main(){
scanf("%d%lld", &n, &m);
for (int i = 1;i <= n;i++){
scanf("%lld", &w[i]);
if(i == 1)min_w = w[i];
else {
if (w[i] < min_w){
min_w = w[i];
idx = i;
}
}
}
ans = min_w;
for (int i = 1;i <= n;i++) w[i] -= min_w;
for (int i = 1;i <= n;i++)scanf("%d", &v[i]);
long long l = 0, r = (long long)(m/v[idx]), mid;
while(l<r){
mid = (l+r)/2;
if(check(mid)) l = mid;
else r = mid - 1;
}
printf("%lld\n", ans + l);
return 0;
}