NC19798(区间权值 )

感受

思路


图片说明


#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int maxn = 3e5 + 10;
int n;
ll sum[maxn], suf[maxn], a[maxn], w[maxn], dp[maxn];
int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%lld", &a[i]);
        sum[i] = sum[i - 1] + a[i];
    }
    for(int i = n; i >= 1; i--){
        suf[i] = suf[i + 1] + a[i];
    }
    for(int i = 1; i <= n; i++){
        scanf("%lld", &w[i]);
    }
    ll ans = 0;
    for(int i = 1; i <= n; i++){
        dp[i] = dp[i - 1] - suf[n - i + 2] + sum[n] - sum[i - 1];
        dp[i] %= mod; while(dp[i] < 0) dp[i] += mod;
        ans = ans + w[i] * dp[i] % mod; ans %= mod;
    }
    printf("%lld\n", ans);
    return 0;
}
全部评论

相关推荐

nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务