序列卷积之和

题目:序列卷积之和

题解:这题打表找规律,然后用前缀和。
在这里插入图片描述
每对i*j出现了多少对。
第一行相当于(a[1]*4+a[2]*3+a[3]*2+a[4]*1)*1
第二行相当于(a[2]*3+a[3]*2+a[4]*1)*2
第三行相当于(a[3]*2+a[4]*1)*3

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int inf = 0x7f7f7f7f;
const int N = 2e5+10;
const ll mod = 1e9+7;


inline int read() {
    char ch=getchar();int x=0,f=1;
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while('0'<=ch&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x * f;
}

ll a[N];
ll sum[N];

int main(){
    int n = read();
    for(int i = 1;i <= n;i++){
        cin >> a[i];
        sum[i] = (sum[i-1]+(a[i]*(n-i+1))%mod)%mod;
    }
    ll ans = 0;
    for(int i = 1;i <= n;i++){
        ll t  = (sum[n]-sum[i-1]+mod)%mod;
        t = ((t*i)%mod*a[i])%mod;
        ans = (ans+t)%mod;
    }
    cout<<ans<<endl;
    return 0;
}

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读