思路
直接算想都不想一定超时,从公式入手,找规律化简
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)
总结
重点是不要被公式吓到,也别直接暴力,如果暴力那这题一点算法都没有,总得考你点什么吧。