我也是二分法,但只过了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;
}