| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AATAAATTTTTTTTTTTTTT |
| 题目名称 |
OohMoo Milk |
最终得分 |
25 |
| 用户昵称 |
Lixj |
运行时间 |
17.054 s |
| 代码语言 |
C++ |
内存使用 |
7.77 MiB |
| 提交时间 |
2026-07-02 12:28:18 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int MOD=1e9+7;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
freopen("Milk.in","r",stdin);
freopen("Milk.out","w",stdout);
int N,D,A,B;
cin>>N>>D>>A>>B;
multiset<long long>ms; // 维护当前所有瓶子的奶量
for(int i=0;i<N;i++){
long long m;
cin>>m;
ms.insert(m);
}
//for(int i=1;i<=n;i++)
// cin>>a[i];
//sort(a+1,a+n+1)
//for(int i=0;i<A;i++){
while(D--){
//增加牛奶后放回
vector<long long> add;
auto it=ms.end();
for(int i=0;i<A;i++){
it--;
add.push_back(*it+1);
}
for(long long v:add)
ms.erase(ms.find(v-1));
for(long long v:add)
ms.insert(v);
//偷取牛奶
if(B>0){
vector<long long>sub;
it=ms.end();
for(int i=0;i<B;i++){
it--;
sub.push_back(*it-1);
}
for(long long v:sub){
ms.erase(ms.find(v+1));
}
for(long long v:sub)
ms.insert(v);
}
}
// 计算平方和并取模
long long ans=0;
for(long long v:ms)
ans=(ans+(v%MOD)*(v%MOD))%MOD;
//ans=v%MOD*V*MOD+ans%MOD
cout<<ans;
return 0;
}