AcWing_4644 求和(前缀和)

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;
}