AcWing
4644. 求和(第十三届蓝桥杯省赛C++ A组/C组)
数学规律,前缀和。
$a_1 \times (a_2 + a_3 + a_4 + \cdots + a_n)$
$a_2 \times (a_3 + a_4 + \cdots + a_n)$
$\cdots$
$a_{n-1} \times (a_n)$
倒序遍历,维护一个前缀和数组,每次加进一个元素,时间复杂度为$O(n)$.
注意使用long long
,会爆int
!!
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
const int N = 200010;
int a[N];
int main(){
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
LL sum = 0, pre = a[n];
for(int i = n - 1; i >= 1; i--){
sum += (LL)a[i] * pre;
pre += (LL)a[i];
}
cout << sum << endl;
return 0;
}