60pts
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e5+5;
int n,p,q,r,a[maxn],s,ans;
signed main(){
cin>>n>>p>>q>>r;
for(int i=1;i<=n;i++) cin>>a[i],s+=a[i];
sort(a+1,a+n+1);
for(int i=1;i<n;i++)
if(s<0&&q<p*-max(a[i],s))
s-=a[i],ans+=q;
ans+=max(0ll,-p*s);
cout<<ans;
return 0;
}
100pts
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e5+5;
int n,p,q,r,a[maxn],s,ans;
signed main(){
cin>>n>>p>>q>>r;
for(int i=1;i<=n;i++) cin>>a[i],s+=a[i];
sort(a+1,a+n+1);
for(int i=1;i<n;i++)
if(s<0&&q<p*-max(a[i],s))
s-=a[i],ans+=q;
if(s<0)ans-=p*s;
cout<<ans;
return 0;
}
两处注释的地方
ans+=max(0ll,-p*s)
等价于:
if(-p*s>0) ans+=-p*s
等价于:
if(p*s<0) ans-=p*s
因为 1≤p≤109,所以等价于
if(s<0) ans-=p*s
那为什么第一种写法会 WA 一个呢