前缀.因式分解.求和 .C

前缀和:在输入同时获得结果.

s[i]=s[i-1]+input(a[i]).

区间和:前缀做差

Sum[A,B]=s[B]-s[A-1].

for(i=1,i<=n,i++){

        input(a[i]);

        s[i]=s[i-1]+input(a[i]).

        input(a,b);

        count=s[b]-s[a-1];

}


分解伪代码 

S=a2*a1+a3*(a2+a1)+a4*(a3+a2+a1)+a5*(a4+a3+a2+a1) 因式分解复杂度on;

>>> func_(){

        input(n);

        lld sum, j=0;

        for(i=0-><n,1){%D

                input(a[i]);

                sum+=j*a[i];

                j+=a[i];

        }

        return sum;

}


S=a1*(a2+a3+a4+a5)+a2*(a3+a4+a5)+a3*(a4+a5)+a4*a5  复杂度on;

前缀和:

lld a[], s[];

func_(){

        int i , n;

        lld sum=0;

        input(a[i]);

        for(i=0-><n,1){

                if i=0  ->s[i]=a[i];

                else  s[i]=s[i-1]+a[i] //前缀和数组

        }

        for(i=0-><n,1){

               sum+=a[i]*(s[n-1]-s[i]); //末项-初项

        }

        return sum;

}

acode

int main(){
    int n;
    scanf("%d",&n);
    long long sum = 0, j=0;
    for(int i=0;i<n;++i){
        scanf("%d",&a[i]);
        sum+=j*a[i];
        j+=a[i];
    }
    printf("%lld",sum);
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值