题目描述
给定 n 个整数 a1, a2, · · · , an ,求它们两两相乘再相加的和,即 S = a1 · a2 + a1 · a3 + · · · + a1 · an + a2 · a3 + · · · + an-2 · an-1 + an-2 · an + an-1 · an
输入格式
输入的第一行包含一个整数 n 。
第二行包含 n 个整数 a1, a2, · · · an。
输出格式
输出一个整数 S,表示所求的和。请使用合适的数据类型进行运算。
样例输入
4
1 3 6 9
样例输出
117
知识点:前缀和与差分
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=200020;
ll a[N];
ll b[N];
ll sum;
int main()
{
ll n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=b[i-1]+a[i];
}
for(int i=1;i<=n-1;i++)
{
sum+=a[i]*(b[n]-b[i]);
}
cout<<sum<<endl;
return 0;
}