问题描述
给定 �n 个整数 �1,�2,⋅⋅⋅,��a1,a2,⋅⋅⋅,an ,求它们两两相乘再相加的和,即:
S=a1⋅a2+a1⋅a3+⋯+a1⋅an+a2⋅a3+⋯+an−2⋅an−1+an−2⋅an+an−1⋅an
思路:求和的实质就是求每项与它后几项的和的乘积sum=a1*(a2+a3+...+an)+a2*(a3+a4+..+an)....+an-1*an
输入格式
输入的第一行包含一个整数 an。
第二行包含 n 个整数 a1,a2,⋯,an。
输出格式
输出一个整数 �S,表示所求的和。请使用合适的数据类型进行运算。
样例输入
4
1 3 6 9
样例输出
117
评测用例规模与约定
对于 30%30% 的数据,1≤�≤1000,1≤��≤1001≤n≤1000,1≤ai≤100 。
对于所有评测用例, 1≤�≤200000,1≤��≤10001≤n≤200000,1≤ai≤1000 。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
-
#include <iostream> using namespace std; int main() { unsigned long long sum=0,x=0; int n; cin>>n; int a[n]; for(int i=0;i<n;i++){ cin>>a[i]; x+=a[i]; } for(int i=0;i<n-1;i++){ x=x-a[i]; sum+=a[i]*x; } printf("%llu",sum); return 0; }
该文描述了一个编程问题,要求计算给定整数数组中所有数对相乘然后相加的总和。解决方案是通过迭代数组并利用每项与后续项之和的乘积来求解,最后输出总和。样例输入和输出展示了问题的实例,同时给出了针对不同规模数据的评测用例限制和运行时间、内存限制。
&spm=1001.2101.3001.5002&articleId=129504057&d=1&t=3&u=28d40e6d96d54d45909e1b1e47303a70)
763

被折叠的 条评论
为什么被折叠?



