题目描述:
给定 n个整数a1,a2,⋅⋅⋅,an ,求它们两两相乘再相加的和,即:
S=a1⋅a2+a1⋅a3+⋯+a1⋅an+a2⋅a3+⋯+an−2⋅an−1+an−2⋅an+an−1⋅an
问题描述
本题刚开始采用暴力算法,不出所料的超时,只有三十分
for i in range(n):
for j in range(i+1,n):
sum += a[i]*[j]
解决方案:
分析来看要用前缀和解决区间和问题
原一维数组:a[0] a[1] a[2]_……a[i]
前缀和: s[i] = a[0]+a[1]+……+a[i]
区间和为 a[i]+a[i+1]……+a[j] = s[i] - s[j]
解题思路:
预计算出前缀和
求出区间和乘以该数字、
解题思路:
n=int(input())
S=0
a=list(map(int,input().split()))
s1=sum(a)
for i in range(0,n):
s1-=a[i]
S+=a[i]*s1
print(S)