P10412 の 题解
通过观察不难发现
注意到问题的答案仅于该数列所有元素的和有关,因此操作三无效。因此考虑枚举操作二的次数确定操作一的次数来更新答案。
具体的,记序列元素总和为
注
-
虽然答案在 long long 范围内,但是单个方案的大小可能超过 long long 的表示范围。
-
操作二最多使用
n-1 次,不能将数列删空。
code
// Created by cyx in 2024
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
using namespace std;
const int N=1e5+5;
int n,p,q,r;
int a[N];
__int128 sum;
signed main() {
IOS;
cin>>n>>p>>q>>r;
for(int i=1; i<=n; i++)
cin>>a[i],sum+=a[i];
if(sum>=0) cout<<0,exit(0);
sort(a+1,a+1+n);
__int128 ans=1e18;
for(__int128 i=0; i<=n-1; i++) {
sum-=a[i];
if(sum<0) ans=min(ans,(-sum)*p+1ll*i*q);
else {
ans=min(ans,i*q);
break;
}
}
cout<<(long long)(ans);
return 0;
}
/*
*/