洛谷T778641 模拟赛1 T1 评估(assess)

T778641 模拟赛1 T1 评估(assess)

题目描述

小明同学是一家科技公司数据分析部门的员工。一天,他获取到了一组长度为 \(n\) 的整数数列 \(a_i\),这个数列代表着每个时间段产品的性能数据。为了更深入地了解产品性能的波动情况,他需要计算 \(\sum_{i=1}^{n-1} \sum_{j=i+1}^n |a_i - a_j|^2\) 来评估整体的差异程度(数列从 \(1\) 开始编号)。

但小明同学并不想去计算,于是他想请你帮忙。

输入格式

输入的第一行包含一个正整数 \(n\),表示数列的长度。

输入的第二行包含 \(n\) 个整数 \(a_i\),表示每个时间段产品的性能数据。

输出格式

输出共一行,包含一个整数,表示数列整体的差异程度。

输入输出样例 #1

输入 #1

3
2 8 4

输出 #1

56

输入输出样例 #2

输入 #2

5
-5 8 9 -4 -3

输出 #2

950

说明/提示

样例 1 解释

\(|2-8|^2 + |2-4|^2 + |8-4|^2 = 36 + 4 + 16 = 56\)。

数据规模与约定

  • 对于 \(40\%\) 的数据,保证 \(n \le 1000,|a_i| \le 10\)。
  • 对于 \(100\%\) 的数据,保证 \(n \le 1 \times 10^5,|a_i| \le 1000\)。

这是我的模拟赛满分的题目

首先很多人看到这题心想:这么简单的枚举?
就直接双重循环打暴力结果发现:
有一半过不了??
我就是这么过来的
这题难度不大,但是很坑,我们要用O(n)的法子过掉
让我们从给的式子入手:
\(\sum_{i=1}^{n-1} \sum_{j=i+1}^n |a_i - a_j|^2\)
展开平方:
\((a_i - a_j)^2=a_i^2-2a_ia_j+a_j^2\)
全部配对推导我们可以得到:
\(\sum_{i<j}^{} (a_i - a_j)^2=1/2 [n \sum_{}^{} a_i^2-(\sum_{}^{} a_i)^2]\)
推出这个式子代码就出来了

ACcode:

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int n;
long long a[N];
long long ans;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	long long sum=0,s=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
		s+=a[i]*a[i];
	}
	ans=(1ll*n*s-sum*sum); //完美的优化O(n)!
	cout<<ans<<endl;
	return 0;
}
//Author:AAA_jiancaipifa
posted @ 2026-08-15 16:35  AAA_jiancaipifa  阅读(27)  评论(0)    收藏  举报