差异之和

差异之和
差异之和
思路:显然n^2暴力枚举一定会超时,因为他们叫我们求的是绝对值之和,所以我们可以先把这些数排序,求前缀和,然后直接+当前值*(n-i)再减后面那些数的和(用前缀和算比较好)。
代码

#include<bits/stdc++.h>
using namespace std;
long long n,i,j,a[1000000],as[1000000],s;
bool cmp(int a,int b){
    
    
	return a>b;
}
int main(){
    
    
	scanf("%lld",&n);
	for(i=1;i<=n;i++)scanf("%lld",&a[i]);
	sort(a+1,a+1+n,cmp);
	for(i=1;i<=n;i++)as[i]+=as[i-1]+a[i];
	for(i=1;i<=n;i++)
		s+=abs(a[i]*(n-i)-(as[n]-as[i]));
	printf("%lld",s);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_52536621/article/details/113443805
今日推荐