求和【第十三届蓝桥杯省赛C++A/C组 , 第十三届蓝桥杯省赛JAVAA组】
求和
给定 \(n\) 个整数 \(a1,a2,⋅⋅⋅,an\),求它们两两相乘再相加的和,即
\(S=a1⋅a2+a1⋅a3+⋅⋅⋅+a1⋅an+a2⋅a3+⋅⋅⋅+an−2⋅an−1+an−2⋅an+an−1⋅an\)
输入格式
输入的第一行包含一个整数 \(n\)。
第二行包含 \(4n\) 个整数 \(a1,a2,⋅⋅⋅,an\)
输出格式
输出一个整数 \(S\),表示所求的和。
请使用合适的数据类型进行运算。
数据范围
对于 \(30%\) 的数据,\(1≤n≤1000,1≤ai≤100\)。
对于所有评测用例,\(1≤n≤200000,1≤ai≤1000\)。
输入样例:
4
1 3 6 9
输出样例:
117
Code
点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int n;
const int N = 1e6 + 10;
LL a[N],s[N],ans;
int main(){
cin >> n;
for(int i = 1; i <= n; i ++ ){cin >> a[i];s[i] = s[i - 1] + a[i];}
for(int i = 1; i <= n - 1; i ++ )ans += a[i] * (s[n] - s[i]);
cout << ans;
}
注意
- long long