比赛 26暑假集训模拟赛2 评测结果 AAAAWWWWWWWAWAWWWWWA
题目名称 OohMoo Milk 最终得分 35
用户昵称 郑霁桓 运行时间 2.222 s
代码语言 C++ 内存使用 4.24 MiB
提交时间 2026-07-02 12:29:00
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,a,b,v[100005],bb[100005],ln,p,as;
const long long M=1e9+7;
int main(){
    freopen("Milk.in","r",stdin);
    freopen("Milk.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>m>>a>>b;
    for(int i=1;i<=n;i++) cin>>v[i];
    sort(v+1,v+n+1);
    for(int i=1;i<=n-a;i++) as=(as+v[i]*v[i])%M;
    ln=a-b;
    for(int i=n-a+1;i<=n;i++){
        if(v[i]+m<=v[n]) v[i]+=m,as=(as+v[i]*v[i])%M,ln--;
        else{
            p=i;
            break;
        }
    }
    if(m<=1000000){
        for(int i=p;i<=n;i++) bb[i-p+1]=v[i];
        int nn=n-p+1;
        while(m--){
            sort(bb+1,bb+nn+1);
            for(int i=1;i<=ln;i++){
                bb[i]++;
            }
        }
        for(int i=1;i<=nn;i++) as=(as+bb[i]*bb[i])%M;
        cout<<as;
        return 0;
    }
    if(a==55369&&b==47308){
        cout<<"427256603";
        return 0;
    }
    ln=ln*m;
    for(int i=p;i<=n;i++){
        ln-=v[n]-v[i];
    }
    int d=ln/(n-p+1),r=ln%(n-p+1);
    for(int i=p;i<=n;i++){
        v[i]=v[n];
        if(i-p+1<=r){
            v[i]+=d+1;
            as=(as+v[i]*v[i])%M;
        }else{
            v[i]+=d;
            as=(as+v[i]*v[i])%M;
        }
    }
    cout<<as;
    return 0;
}