这两种写法为什么一个WA一个AC
查看原帖
这两种写法为什么一个WA一个AC
748437
AirQwQ楼主2024/5/7 20:29

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 1\le p \le 10^9,所以等价于

if(s<0) ans-=p*s

那为什么第一种写法会 WA 一个呢

2024/5/7 20:29
加载中...