算法2
(数学) $考虑端点效应$
我们考虑左右端点,(此处考虑左端点)。
无论什么时候我们加入左端点,总可以得到,左端点的贡献是 乘以其他所有的数字,也就是 左端点之后的数
那么再考虑左侧第二个端点,同理,应当是其他所有的数字,但是由于在第一个位置已经计算过,所以我们只需要考虑后续的数字。
综上,也就是 考虑每个数字的往后的位置的贡献
C++ 代码
#include<bits/stdc++.h>
using namespace std;
long long a[100000+100];
int main()
{
int n , temp = 0;
cin >> n;
for(int i = 1 ; i <= n ; i ++)
{
scanf("%lld",&a[i]);
temp += a[i];
}
long long ans = 0 ;
for(int i = 1 ; i <= n ; i ++)
{
ans += ( temp - a[i] ) * a[i];
temp -= a[i];
}
cout << ans ;
}