比赛 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;
}