[蓝桥杯 2022 省 A] 求和
题目描述
给定 个整数 , 求它们两两相乘再相加的和,即
输入格式
输入的第一行包含一个整数 。
第二行包含 个整数 。
输出格式
输出一个整数 ,表示所求的和。请使用合适的数据类型进行运算。
样例 #1
样例输入 #1
4
1 3 6 9
样例输出 #1
117
提示
对于 的数据, 。
对于所有评测用例, 。
蓝桥杯 2022 省赛 A 组 C 题。
思路
首先,定义一个长整型数组prefix用于存储前缀和,即数组a的前个元素之和。然后,从输入中读取整数,并依次读取个整数,同时计算并存储前缀和。
接着,初始化结果ans为0,遍历数组a的每一个元素(除了最后一个),每次将当前元素与之后所有元素的和(即prefix[n] - prefix[i])的乘积累加到ans中。
最后,输出结果ans。
注意
前缀和数组 prefix 和结果变量 ans 要使用 long long,否则无法通过部分测试点。
AC代码
#include <algorithm>
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
using ll = long long;
const int N = 1e6 + 7;
const ll MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
int n;
int a[N];
ll prefix[N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
prefix[0] = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
prefix[i] = prefix[i - 1] + a[i];
}
ll ans = 0;
for (int i = 1; i < n; i++) {
ans += a[i] * (prefix[n] - prefix[i]);
}
cout << ans << "\n";
return 0;
}