P8772 [蓝桥杯 2022 省 A] 求和 - 洛谷
题目描述
给定 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,表示所求的和。请使用合适的数据类型进行运算。
输入输出样例
输入 #1
markdown
4
1 3 6 9
输出 #1
markdown
117
说明/提示
- 对于 30% 的数据,1≤n≤1000,1≤ai≤1000。
- 对于所有评测用例,1≤n≤2×105,1≤ai≤1000。
蓝桥杯 2022 省赛 A 组 C 题
思路:
前缀和模拟即可,记得开longlong
代码如下:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const ll N = 2e5+10;
ll a[N],n,cnt,pre[N];
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for(ll i = 1 ; i <= n ; i++){cin >> a[i];pre[i] = pre[i-1]+a[i];}ll sum = 0;for(ll i = 1 ; i <= n ; i++){sum += a[i] * (pre[n] - pre[i]);}cout << sum;return 0;
}