区间权值 前缀和
鏈接:https://www.nowcoder.com/acm/contest/204/G
來源:牛客網
?
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 1048576K,其他語言2097152K
64bit IO Format: %lld
題目描述
小 Bo 有 n 個正整數 a1..an,以及一個權值序列 w1…wn,現在他定義
現在他想知道 的值,需要你來幫幫他
你只需要輸出答案對 109+7 取模后的值
輸入描述:
第一行一個正整數 n 第二行 n 個正整數 a1..an 第三行 n 個正整數 w1..wn輸出描述:
輸出答案對 109+7 取模后的值?
示例1
輸入
復制
3 1 1 1 1 1 1輸出
復制
10備注:
1≤ n≤ 3x 105 1≤ ai≤ 107 1≤ wi≤ 107題解地址
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<cstdio> #include<string> #include<math.h> #include<algorithm> #include<map> #include<set> //#define mod 998244353 #define INF 0x3f3f3f3f #define eps 1e-6 using namespace std; typedef long long ll; const int mod=1e9+7; const int maxn=3e5+10; ll w[maxn]; ll a[maxn]; ll f[maxn];//a[i]的前綴和 ll g[maxn];//g[i]的前綴和 int main() {int n;scanf("%d",&n);a[0]=0;f[0]=0;for(int i=1;i<=n;i++){scanf("%lld",&a[i]);f[i]=(f[i-1]+a[i])%mod;}for(int i=1;i<=n;i++)scanf("%lld",&w[i]);g[0]=0;for(int i=1;i<=n;i++)g[i]=(f[i]+g[i-1])%mod;ll ans=0;for(int i=1;i<=n;i++)ans=(ans+(g[n]-g[n-i]-g[i-1])*w[i]%mod)%mod;printf("%lld\n",(ans+mod)%mod); }?
總結
- 上一篇: 牛客网 New Game! 建图+最短路
- 下一篇: POJ2195 Going Home