NC19798. 区间权值
描述
输入描述
第一行一个正整数 n
第二行 n 个正整数 a1..an
第三行 n 个正整数 w1..wn
输出描述
输出答案对 109+7 取模后的值
示例1
输入:
3 1 1 1 1 1 1
输出:
10
C++(g++ 7.5.0) 解法, 执行用时: 247ms, 内存消耗: 8404K, 提交时间: 2022-10-14 20:57:45
#include<bits/stdc++.h> using namespace std; int a[300001]; int b[300001]; int a1[300001]; int mod=1e9+7; long long sum=0; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; a1[i]=(a1[i-1]+a[i])%mod; } for(int i=1;i<=n;i++)cin>>b[i]; long long dp=0; for(int l=1;l<=n;l++) { int temp; dp=(dp+a1[n-l+1]-a1[l-1]+mod)%mod; temp=dp*b[l]%mod; sum=(sum+temp)%mod; } cout<<sum<<endl; }
C 解法, 执行用时: 103ms, 内存消耗: 5124K, 提交时间: 2022-12-13 21:42:31
#include <stdio.h> const int mod=1e9+7; int n; long long f=0,a[300010],w[300010],b[300010]; int main() { int i,j; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%lld",&a[i]); a[i]=(a[i]+a[i-1])%mod; } for(i=1;i<=n;i++) { scanf("%lld",&w[i]); w[i]=(w[i]+w[i-1])%mod; } for(i=1;i<=n;i++) { f=(f+a[i]*w[i]-a[i-1]*w[n-i+1])%mod; } f=(f+mod)%mod; printf("%lld",f); return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 165ms, 内存消耗: 2728K, 提交时间: 2022-08-02 11:03:21
#include<bits/stdc++.h> #define LL long long using namespace std; const int M=1e9+7,N=3e5+7; LL n,x; LL a[N]; int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; a[i]=(a[i]+a[i-1])%M; } LL ans=0,sum=0; for(int i=1;i<=n;i++) { cin>>x; sum=(sum+a[n-i+1]-a[i-1]+M)%M; ans=(ans+sum*x)%M; } cout<<ans<<endl; return 0; }
Pascal(fpc 3.0.2) 解法, 执行用时: 115ms, 内存消耗: 3680K, 提交时间: 2018-10-05 08:59:49
const m=1000000007; var w,s,a:array[1..5000000]of longint; i,j,k,n:longint; sum,ans:int64; begin readln(n); for i:=1 to n do begin read(a[i]); s[i]:=(s[i-1]+a[i])mod m; end; for i:=1 to n do read(w[i]); for i:=1 to n do begin sum:=(sum+(s[n-i+1]-s[i-1]+m)mod m)mod m; ans:=(ans+sum*w[i] mod m) mod m; end; writeln(ans); end.