P8772 [蓝桥杯 2022 省 A] 求和 题解

Thenyu / 2023-08-23 / 原文

蒟蒻第一次发题解qwq

$ S=a_1 \times a_2+a_1 \times a_3+a1 \times a_n+a_2 \times a_3+···+a_n-2 \times a_n-1+a_n-1 \times a_n $

从样例来看

4

1 3 6 9

这道题就是要求

$ 1\times3+1\times6+1\times9+3\times6+3\times9+6\times9 $

我们可以把这个算式分成几个部分

$(1 \times 3)+(1 \times 6+3 \times 6)+(1 \times 9+3 \times 9+6 \times 9)$

然后用我们小学就学过的乘法分配律
$a \times c+b \times c=(a+b)c$

把算式变成这样

$ 1 \times 3+(1+3) \times 6+(1+3+6) \times 9 $

就可以发现这道题其实就是求前面所有的数的和 $\times$ 这个位置上的数了

AC代码

#include<bits/stdc++.h>
using namespace std;
int n,a;
long long tmp,ans;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a),ans+=a*tmp,tmp+=a;//tmp求前面所有的数的和,ans累加答案
	printf("%lld",ans);
	return 0;
}