题目描述
给定n个整数a[1],a[2],...,a[n],求两两相乘再相加的和,即 S=a[1]·a[2]+a[1]·a[3]+...+a[1]·a[n]+a[2]·a[3]+...+a[2]·a[n]+...+a[n-1]·a[n]
输入格式
第一行为正整数n,第二行为n个整数。 30%的数据:2≤n≤1000,1≤a[i]≤100。 100%的数据:2≤n≤200000,1≤a[i]≤1000。
输出格式
输出一个数字表示答案S。
思路:
用前缀和数组预处理出sum [ i, j ].
参考代码:
#include <bits/stdc++.h>
using ll = long long;
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n;
std::cin >> n;
std::vector<ll> a(n+1),sum(n+1);
for(int i=1;i<=n;i++) {
std::cin >> a[i];
}
for(int i=1;i<=n;i++) {
sum[i]=sum[i-1]+a[i];
}
ll ans=0;
for(int i=1;i<=n;i++) {
ans+=a[i]*(sum[n]-sum[i]);
}
std::cout << ans;
return 0;
}