比赛 26暑假集训模拟赛2 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 OohMoo Milk 最终得分 100
用户昵称 PXCZM 运行时间 0.491 s
代码语言 C++ 内存使用 4.25 MiB
提交时间 2026-07-02 11:50:06
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
ll n,d,A,B,pos;
ll a[100010];
ll ans,sum;
int main()
{
    freopen("Milk.in","r",stdin);
    freopen("Milk.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    cin>>n>>d>>A>>B;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+1+n);
    pos=n-A+1;
    for(int i=1;i<pos;i++) ans=(ans+a[i]*a[i]%mod)%mod;
    for(int i=pos;i<=n-B;i++) sum+=a[i];
    sum+=d*(A-B);
    for(int i=pos,j=n-B+1,k=A;i<=n;i++)
    {
        if(i>=n-B+1)
        {
            for(int k=i;k<=n;k++)
                ans=(ans+a[k]*a[k]%mod)%mod;
            break;
        }
        ll tp1=sum/(j-i),tp2=sum%(j-i);
        while(j<=n&&a[j]<=tp1+(tp2!=0))
        {
            sum+=a[j];
            j++;
            tp1=sum/(j-i),tp2=sum%(j-i);
        }
        if(a[i]+d<tp1)
        {
            a[i]+=d;
            ans=(ans+a[i]*a[i]%mod)%mod;
            sum-=a[i];
        }
        else
        {
            ans=(ans+tp1*tp1%mod*(j-i-tp2)%mod)%mod;
            ans=(ans+(tp1+1)*(tp1+1)%mod*tp2%mod)%mod;
            for(int k=j;k<=n;k++) ans=(ans+a[k]*a[k]%mod)%mod;
            break;
        }
    }
    cout<<ans;
    return 0;
}