SOJ-4310 Sum of product

来源:互联网 发布:一键部署php环境 编辑:程序博客网 时间:2024/05/16 15:06

这题很容易想到用三层循环,但很明显超时,所以要优化。

s1=a[n](a[n-1]*(a[n-2]+........a[1])+a[n-2]*(a[n-3]+......a[1])+.......a[2]*a[1])

s2=a[n-2](a[n-2]*(a[n-3]+....a[1])+a[n-3]*(a[n-4]+.......a[1])+.......a[2]*a[1])

.............

sn=a[3]*(a[2]*a[1]);

所以这就有规律了,直接优化到O(n)的算法。

#include<iostream>#include<cstdio>#include<cstring>#define Mod 1000000007typedef long long LL;using namespace std ;const int N=1000005;LL a[N],sum[N],Mu[N];int main(){int n;sum[0]=0;Mu[2]=0;    while(scanf("%d",&n)!=EOF){for(int i=1;i<=n;i++){scanf("%lld",&a[i]);sum[i]=(sum[i-1]+a[i])%Mod;if(i>2) Mu[i]=(Mu[i-1]+(a[i-1]*sum[i-2]))%Mod;}LL ans=0;for(int i=n;i>2;i--){ans+=(a[i]*Mu[i])%Mod;}printf("%lld\n",ans*6%Mod);    } return 0 ;}


原创粉丝点击