列表

详情


NC204333. 序列卷积之和

描述

给出一个长度为的数组,计算  并输出。

输入描述

第一行一个整数
第二行个整数

输出描述

输出一行一个整数表示答案。

示例1

输入:

4
6 7 8 9

输出:

1988

示例2

输入:

5
4 7 66 22 8

输出:

59480

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 81ms, 内存消耗: 3524K, 提交时间: 2020-07-22 14:25:24

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=1e9+7;
ll n,a[200003],ans=0,s[200003];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)s[i]=s[i-1]+a[i]*(n-i+1);
    for(int i=1;i<=n;++i)
    ans=(ans+(((s[n]-s[i-1])%mod)*(a[i]*i%mod))%mod)%mod;
    cout<<ans;
    return 0;
}

Python3(3.5.2) 解法, 执行用时: 287ms, 内存消耗: 27424K, 提交时间: 2020-05-22 19:35:39

import sys
lines = sys.stdin.readlines()
n = int(lines[0].strip())
nums = list(map(int, lines[1].strip().split(" ")))
pre = [nums[0]]
for i in range(1, n):
    pre.append(nums[i] * (i+1) + pre[-1])

MOD = 10**9 +7
res = 0
for i in range(n):
    res = (res + pre[i] * nums[i] * (n-i)) % MOD
print(res)

C++11(clang++ 3.9) 解法, 执行用时: 47ms, 内存消耗: 1892K, 提交时间: 2020-05-22 20:35:32

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=1e9+7;
ll n,i,xlh,ans,a[500010];
int main(){
	scanf("%lld",&n);
	for(i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		(xlh+=a[i]*i%p)%=p;
		ans=(ans+xlh*a[i]%p*(n-i+1))%p;
	}
	printf("%lld\n",ans);
}

上一题