思路
直接算想都不想一定超时,从公式入手,找规律化简
S = a 1 ( a 2 + a 3 + . . . + a n ) + a 2 ( a 3 + . . . + a n ) + . . . + a n − 1 a n S = a_1(a_2+a_3+...+a_n) + a_2(a3+...+a_n)+...+a_{n-1}a_n S=a1(a2+a3+...+an)+a2(a3+...+an)+...+an−1an
多次用到了求和,前缀和,完美。
n = int(input())
a = [0] + list(map(int,input().split()))pre = [0 for i in range(n+1)]
for i in range(1,n+1):pre[i] = pre[i-1] + a[i]ans = 0
for i in range(1,n-1 + 1):ans += a[i]*(pre[-1] - pre[i])print(ans)
总结
重点是不要被公式吓到,也别直接暴力,如果暴力那这题一点算法都没有,总得考你点什么吧。