求和【第十三届蓝桥杯省赛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; 
}

注意

  1. long long
posted @ 2023-01-04 15:29  Keith-  阅读(67)  评论(0编辑  收藏  举报