错一个点求调,玄关
查看原帖
错一个点求调,玄关
374769
Epi4any楼主2024/10/12 13:19
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll INF=15e11;
const int maxn=105;
struct Node {
    ll a,b,p,q;
    void init() {
        if(1.0*a/p<1.0*b/q) {
            swap(a,b);
            swap(p,q);
        }
    }
} pool[maxn];
ll n,x,ans;
bool check(ll tar) {
//    cout<<tar<<endl;
    ll rmn=x;
    for(ll i=1;i<=n;i++) {
        ll tmp=INF;
        for(ll j=0;j<pool[i].a;j++) {
            ll num=(tar-j*pool[i].b)/pool[i].a;
            if((tar-j*pool[i].b)%pool[i].a) {
                num++;
            }
//            cout<<num<<endl;
            ll cur=pool[i].p*num+pool[i].q*j;
            tmp=min(tmp,cur);
        }
//        cout<<tmp<<endl;
        if(rmn<tmp) {
            return false;
        } else {
            rmn-=tmp;
        }
    }
    return true;
}
int main() {
//    cout<<setprecision(20);
    cin>>n>>x;
    for(ll i=1;i<=n;i++) {
        cin>>pool[i].a>>pool[i].p>>pool[i].b>>pool[i].q;
        pool[i].init();
    }
    ll l=0,r=INF;
    while(l<=r) {
        ll mid=(l+r)/2;
        if(check(mid)) {
            ans=mid;
            l=mid+1;
        } else {
            r=mid-1;
        }
    }
    cout<<ans<<endl;
    return 0;
}
2024/10/12 13:19
加载中...