| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
OohMoo Milk |
最终得分 |
100 |
| 用户昵称 |
默 |
运行时间 |
0.458 s |
| 代码语言 |
C++ |
内存使用 |
4.76 MiB |
| 提交时间 |
2026-07-02 10:46:46 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX (int)(1e18)
const int N=1e5+10;
const int mod=1e9+7;
int n,d,pa,pb,pd,ans;
int a[N],sum[N];
inline int read(){
int t=0,f=1;
register char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?(-1):(f),c=getchar();
while(c>='0'&&c<='9') t=(t<<3)+(t<<1)+(c^48),c=getchar();
return t*f;
}
void init(){
int l=n+1,val=0;
for(int i=n;i>=1;i--){
int x=lower_bound(a+1,a+1+n,a[i]-pd)-a;
// cout<<"x:"<<x<<" "<<sum[i]-sum[x-1]<<"\n";
if(d>=sum[i]-sum[x-1]-(i-x+1)*(a[i]-pd)){
l=x,val=a[i]-pd,ans=(ans+val*val%mod)%mod,d-=pd,n--;
}else{
for(int j=l;j<=i;j++) d-=a[j]-val,a[j]=val;
break;
}
}
}
signed main(){
freopen("Milk.in","r",stdin);
freopen("Milk.out","w",stdout);
n=read(),d=read(),pa=read(),pb=read(),pd=d;
for(int i=1;i<=n;i++) a[i]=read();
sort(a+1,a+1+n);
for(int i=n;i>n-pa;i--) a[i]+=d;
for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
d*=pb;init();
int r=n,l=n;
while(l>1&&a[l-1]==a[r]) l--;
while(1){
// cout<<"l:"<<l<<" r:"<<r<"\n";
if((a[l]-a[l-1])*(r-l+1)<=d) d-=(a[l]-a[l-1])*(r-l+1),l--;
else{
for(int i=l;i<=r;i++) a[i]=a[l];
int x=d/(r-l+1);d-=x*(r-l+1);
for(int i=l;i<=r;i++) a[i]-=x;
for(int i=l;i<l+d;i++) a[i]--;
break;
}
while(l>1&&a[l-1]==a[l]) l--;
}
for(int i=1;i<=n;i++) ans=(ans+a[i]%mod*a[i]%mod)%mod;
cout<<ans<<"\n";
return 0;
}