E 这么写为什么 wa 12个点
  • 板块学术版
  • 楼主1234567890sjx
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/5 21:41
  • 上次更新2024/10/6 08:03:57
查看原帖
E 这么写为什么 wa 12个点
1013955
1234567890sjx楼主2024/10/5 21:41

(其实我换了个写法就过了)

//TODO

#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
#define pb push_back
#define eb emplace_back
#define F(i,x,y) for(int i=x;i<=y;++i)
#define G(i,x,y) for(int i=x;i>=y;--i)
#define FD(i,x,y) for(int i=x;i*i<=y;++i)
#define GD(i,x,y) for(int i=x;i*i>=y;--i)
#define adde(x,y) z[x].eb(y);
#define Adde(x,y) z[x].eb(y),z[y].eb(x);
#define addew(x,y,w) z[x].eb(y,w)
#define Addew(x,y,w) z[x].eb(y,w),z[y].eb(x,w)
#define FIMX(X) memset(X,0x3f,sizeof X)
#define FIMI(X) memset(X,-0x3f,sizeof X)
#define FI0(X) memset(X,0,sizeof X)
#define FIN(X) memset(X,-1,sizeof X)
#define rng(X) X.begin(),X.end()
#define PII pair<int,int>
#define PDD pair<double,double>
#define PIII tuple<int,int,int>
#define VI vector<int>
#define VII vector<PII>
#define VID vector<pair<int,double>>
#define VDD vector<PDD>
using namespace std;
const int N=500100;
int a[N],p[N],b[N],q[N];
int n,x;
int chk(int mid){
    int cost=0;
    F(i,1,n){
        //p[i]*b[i]
        cost+=(mid/(a[i]*b[i]))*(p[i]*b[i]);
        if(cost>x)return 0;
        int now=mid%(a[i]*b[i]);
        if(now>0){
            int res=1e18,j;
            for(j=0;j*a[i]<=a[i]*b[i];++j){
                int k=(now-j*a[i]+b[i]-1)/b[i];
                k=max(0ll,k);
                res=min(res,k*q[i]+j*p[i]);
            }
            res=min(res,j*p[i]);
            for(j=0;j*b[i]<=a[i]*b[i];++j){
                int k=(now-j*b[i]+a[i]-1)/a[i];
                k=max(0ll,k);
                res=min(res,k*p[i]+j*q[i]);
            }
            res=min(res,j*q[i]);
            cost+=res;
            if(cost>x)return 0;
        }
    }
    return cost<=x;
}
void solve(unsigned __testid = 1) {
    cin>>n>>x;
    F(i,1,n)cin>>a[i]>>p[i]>>b[i]>>q[i];
    F(i,1,n)
        if(p[i]*b[i]>q[i]*a[i])swap(a[i],b[i]),swap(p[i],q[i]);
    int l=1,r=1e9,best=0;
    while(l<=r){
        int mid=l+r>>1;
        if(chk(mid))best=mid,l=mid+1;
        else r=mid-1;
    }
    cout<<best<<'\n';
}
void Presolve() {
}
int32_t main(){
    // ios_base::sync_with_stdio(0);
    // cin.tie(0);
    int T;
    T=1;
    // T=read();
    Presolve();
    F(_,1,T)
        solve((unsigned)_);
    return 0;
}
2024/10/5 21:41
加载中...