【结论】区间和的和

区间和的和

题目大意:

给出一个数组,求出所有区间和的总和

输入样例:

3
1
2
3

输出样例:

20

数据范围:

对于30%的数据: 1 n 100 1\leqslant n\leqslant 100
对于50%的数据: 1 n 1000 1\leqslant n\leqslant 1000
对于100%的数据: 1 n 100000 1\leqslant n\leqslant 100000

解题思路:

直接枚举所有区间会TLE
那我们从每个数下手
每个数可能在多少个区间中出现呢
首先可以发现区间的最前端要小于等于 i i i(i种可能) ,最后端要大于等于 i n i + 1 i(n-i+1种可能)
于是我们直接那两个数相乘然后乘上 a [ i ] a[i] 在求和即可

代码:

#include<cstdio>
using namespace std;
long long n,a,ans;
int main()
{
	scanf("%ld",&n);
	for (long long i=1;i<=n;++i)
	{
		scanf("%lld",&a);
		ans=(ans+a*i*(n-i+1))%1000000007;//出现次数乘a再求和
	}
	printf("%lld",ans);
}
发布了334 篇原创文章 · 获赞 57 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/ssllyf/article/details/101111938
今日推荐