第十三届蓝桥杯省赛A组题解传送门
题目大意
给定n个整数a1,a2,⋯,an,求它们两两相乘再相加的和
解题思路
答案等于a1×(a2+a3+⋯+an)+a2×(a3+a4+⋯+an)+⋯+an−1×(an)
容易想到上式在括号里的都用前缀和处理
具体代码
#include <bits/stdc++.h>
typedef long long LL;
const int N = 2e5 + 10;
const int INF = 1e9 + 10;
int a[N];
LL s[N];
int n;
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
std::cin >> n;
for (int i = 1; i <= n; ++i)
{
std::cin >> a[i];
s[i] = s[i - 1] + a[i];
}
LL res = 0;
for (int i = 1; i <= n - 1; ++i)
res += a[i] * (s[n] - s[i]);
std::cout << res << '\n';
return 0;
}