AtCoder Beginner Contest 177 比赛人数9636
AtCoder Beginner Contest 177 C Sum of product of pairs 公式推导
总目录详见https://blog.csdn.net/mrcrack/article/details/104454762
在线测评地址https://atcoder.jp/contests/abc177/tasks/abc177_c
题目大意:给出一个数组,数组元素两两求积,再对积求和,输出该和值。
基本思路:公式推导,推导如下:
n=5
a1,a2,a3,a4,a5
a1*a2+a1*a3+a1*a4+a1*a5=a1*(a2+a3+a4+a5)
a2*a3+a2*a4+a2*a5=a2*(a3+a4+a5)
a3*a4+a3*a5=a3*(a4+a5)
a4*a5
根据上述公式推导,可得如下AC代码:
#include <stdio.h>
#define maxn 200010
#define LL long long
#define mod 1000000007
LL a[maxn],sum,ans;//防int溢出,long long最方便。
int main(){
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%lld",&a[i]);
for(i=2;i<=n;i++)sum=(sum+a[i])%mod;
for(i=1;i<n;i++)ans=(ans+a[i]*sum)%mod,sum=((sum-a[i+1])%mod+mod)%mod;//((sum-a[i+1])%mod+mod)%mod可保证结果非负
printf("%lld\n",ans);
return 0;
}