AcWing 4644. 求和
原题
给定 n 个整数 a1,a2,⋅⋅⋅,an1,2,···,,求它们两两相乘再相加的和,即
S=a1⋅a2+a1⋅a3+⋅⋅⋅+a1⋅an+a2⋅a3+⋅⋅⋅+an−2⋅an−1+an−2⋅an+an−1⋅an=1·2+1·3+···+1·+2·3+···+−2·−1+−2·+−1·
输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a1,a2,⋅⋅⋅,an1,2,···,。
输出格式
输出一个整数 S,表示所求的和。
请使用合适的数据类型进行运算。
数据范围
对于 30%30% 的数据,1≤n≤10001≤≤1000,1≤ai≤1001≤≤100。
对于所有评测用例,1≤n≤2000001≤≤200000,1≤ai≤10001≤≤1000。
输入样例:
4
1 3 6 9
输出样例:
117
题解
//求和
#include<algorithm>
#include<cstring>
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
int a;
long long int sum_1=0,sum_2=0;
for(int i=0;i<n;i++)
{
cin>>a;
sum_1+=a;
sum_2+=a*a;
}
cout<<fixed<<setprecision(0)<<(sum_1*sum_1-sum_2)/2;
return 0;
}
- 数学解法,
a 1 a 1 a 1 a 2 a 1 a 3... a1a1 \quad a1a2 \quad a1a3... a1a1a1a2a1a3...
a 2 a 1 a 2 a 2 a 2 a 3... a2a1\quad a2a2 \quad a2a3... a2a1a2a2a2a3...
a 3 a 1 a 3 a 2 a 3 a 3... a3a1\quad a3a2 \quad a3a3... a3a1a3a2a3a3...
要求=(矩阵的和-对角线)/2,矩阵的和等于(a1+a2+a3+…)*(a1+a2+a3+…)
- 注意和的值较大,所以要用long或者long long,另外注意,不要用pow做平方(有一个数据通不过),我刚刚去查了一下应该是pow的输入需要是int,然后所有数据加起来超过了int,就导致出现了…计算结果的错误。