问题描述
给定 �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; }