AcWing 4644. 求和
原题链接
简单
作者:
hed_acwing
,
2023-01-03 19:06:58
,
所有人可见
,
阅读 147
C++ 代码
/*分析题意
S=a1⋅a2+a1⋅a3+⋅⋅⋅+a1⋅an+a2⋅a3+⋅⋅⋅+an−2⋅an−1+an−2⋅an+an−1⋅an
提前公因数 S=a1*(a2+a3+...+an)+a2*(a3+a4+...+an)+..an-1*(an)
假设 sum=a1+a2+...+an;
则S=a1*(sum-a1)+a2*(sum-a1-a2)+....+an-1*(sum-a1-a2-...-an-1)
我们每次改变sum的值即可
题中细节:最终结果可能会爆int的 所以要用long long
*/
#include<iostream>
using namespace std;
typedef long long LL;//重新定义long long
const int N=2e5+10;//根据题目数据范围定义数组大小
int n;
int a[N];
int main()
{
int sum=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];//在输入的时候求 sum的值即可
}
LL res=0;//res为最终的结果
for(int i=0;i<n;i++)
{
sum-=a[i];//sum 每次与a[i] 相乘之前都需要 -a[i]
res+=(LL)sum*a[i];//将每次相乘的结果 +到res上即可
//因为sum*a[i]可能会爆int 所以 需要强制转换为 long long
}
cout<<res<<endl;
return 0;
}