ABC的E,WA俩点求hack
  • 板块学术版
  • 楼主SugarKite
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/5 22:25
  • 上次更新2024/10/6 07:58:21
查看原帖
ABC的E,WA俩点求hack
469213
SugarKite楼主2024/10/5 22:25

https://atcoder.jp/contests/abc374/submissions/58488655

#include<bits/stdc++.h>
using namespace std;
#define int long long 
const int N=150;
int n,m,maxn=0x3f3f3f3f3f3f,ans,amns;
int a[N],p[N],b[N],q[N];
int minn[N][N];
int dp[N][N];
signed main(){
    scanf("%lld%lld",&n,&m);
    memset(dp,0x3f,sizeof(dp));
    memset(minn,0x3f,sizeof(minn));
    for(int i=1;i<=n;i++){
        scanf("%lld%lld%lld%lld",&a[i],&p[i],&b[i],&q[i]);
        maxn=min(maxn,max(m/p[i]*a[i]+a[i],m/q[i]*b[i]+b[i]));
    }
    int l=0,r=maxn;
    while(l<=r){
        int i=(l+r)>>1;
        // cout<<i<<endl;
        int num=0;bool flag=1;
        for(int j=1;j<=n;j++){
            int minc=0x3f3f3f3f3f3f3f;
            if(a[j]*q[j]-b[j]*p[j]>0){
                for(int k=0;k<=min(100ll,(i+a[j]-1)/a[j]);k++){
                    minc=min(minc,(int)(q[j]*k+p[j]*max(((i-b[j]*k+a[j]-1)/a[j]),0ll)));
                }
            }
            else if(a[j]*q[j]-b[j]*p[j]==0){
                for(int k=0;k<=min(100ll,(i+b[j]-1)/b[j]);k++){
                    minc=min(minc,(int)(p[j]*k+q[j]*max(((i-a[j]*k+b[j]-1)/b[j]),0ll)));
                }
                for(int k=0;k<=min(100ll,(i+a[j]-1)/a[j]);k++){
                    minc=min(minc,(int)(q[j]*k+p[j]*max(((i-b[j]*k+a[j]-1)/a[j]),0ll)));
                }
            }
            else{
                for(int k=0;k<=min(100ll,(i+b[j]-1)/b[j]);k++){
                    minc=min(minc,(int)(p[j]*k+q[j]*max(((i-a[j]*k+b[j]-1)/b[j]),0ll)));
                }
            }
            num+=minc;
            // cout<<"minc:"<<minc<<endl;
            // cout<<" "<<num<<endl;
            if(num>m){
                flag=0;
            }
        }
        if(flag){
            l=i+1;
            ans=max(ans,i);
        }
        else r=i-1;

    }
    cout<<ans<<endl;
    return 0;
}
2024/10/5 22:25
加载中...