Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
38501 郭澍宇 【J】T4 C++ 通过 100 103 MS 2600 KB 1149 2025-10-14 15:19:29

Tests(10/10):


#include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,a,cf,cm,m,ans,c[100005],sc[100005],hc[100005]; bool check(ll m,ll w,ll ni){ //if(w>c[n])return 1; ll nw=min(1ll*(upper_bound(c+1,c+n+1,w)-c-1),ni); ll ans = nw*w-sc[nw]; //printf("%lld %lld %lld %lld\n\n",m,w,nw,ans); return ans >m; } int main(){ //freopen("myth.in","r",stdin); //freopen("myth.out","w",stdout); scanf("%lld%lld%lld%lld%lld",&n,&a,&cf,&cm,&m); for(int i = 1;i<=n;i++) scanf("%lld",&c[i]); sort(c+1,c+n+1); for(int i = 1;i<=n;i++)sc[i]=sc[i-1]+c[i]; for(int i = n;i>=1;i--)hc[i]=hc[i+1]+c[i]; for(int j = 0;j<=n;j++){ ll i=n+1-j; if(a*j-hc[i]>m)break; if(j==n){ ans=j*cf+a*cm ; } ll nowm=m-a*j+hc[i]; //printf("%lld %lld %lld\n\n",i,j,nowm); ll l =0 ,r=a; while(l+1<r){ int mid = (l+r)>>1; if(check(nowm,mid,i)) r=mid; else l = mid; } ans = max(ans,j*cf+l*cm); } cout<<ans<<endl; //fclose(stdin); //fclose(stdout); }


测评信息: