| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38551 | wxy | 【J】T4 | C++ | 解答错误 | 40 | 773 MS | 2596 KB | 1554 | 2025-10-15 20:04:54 |
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; typedef long long ll; ll n,A,cf,cm,m; ll a[N],h[N],minn[N]; bool cmp(ll x,ll y){ return x>y; } bool check(ll start,ll x,ll sum){ for(int i=start;i<=n;i++){ if(a[i]<x){ ll nm=h[i]; if(sum>=(x*(n-start+1))-nm){ return 1; }else{ return 0; } } } return 1; } int main(){ scanf("%lld %lld %lld %lld %lld",&n,&A,&cf,&cm,&m); memset(minn,0x3f,sizeof(minn)); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } h[n]=a[n]; for(int i=n-1;i>=1;i--){ h[i]=h[i+1]+a[i]; } for(int i=n;i>=1;i--){ minn[i]=min(minn[i+1],a[i]); } sort(a+1,a+n+1,cmp); ll ans=0; for(int k=1;k<=n;k++){ //cout<<k<<endl; ll sum=m; sum-=(k*A)-(h[1]-h[k+1]); if(sum<0) break; ll l=minn[k+1],r=A; if(k!=n){ while(l<=r){ ll mid=(l+r)/2; //cout<<l<<" "<<r<<" "<<mid<<endl; if(check(k+1,mid,sum)){ l=mid+1; }else{ r=mid-1; } //cout<<l<<" "<<r<<endl; } }else{ l=A+1; } if(l-1==A){ ans=max(ans,n*cf+(l-1)*cm); }else{ ans=max(ans,k*cf+(l-1)*cm); //cout<<k<<" "<<cf<<" "<<(l-1)<<" "<<cm<<endl; //cout<<ans<<endl; } } cout<<ans<<"\n"; return 0; }