【结论】区间和的和

 ̄綄美尐妖づ 提交于 2019-11-30 05:47:20

区间和的和

题目大意:

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

输入样例:

3
1
2
3

输出样例:

20

数据范围:

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

解题思路:

直接枚举所有区间会TLE
那我们从每个数下手
每个数可能在多少个区间中出现呢
首先可以发现区间的最前端要小于等于iii(i种可能),最后端要大于等于ini+1i(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);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!