0%

51nod-2651-区间和的和

题目:
输入一个长度为𝑛的数组𝑎,𝑎包括(𝑛−1)𝑛/2个区间。每个区间所有数的和,被称为区间和,求所有(𝑛−1)𝑛/2个区间和的和。由于数值较大,输出mod 1e9+7的结果。

输入
第一行一个整数n,表示数组长度(2<=n<=100000)
接下来n行,每行一个整数ai,表示数组的内容。(0<=ai<=50000)
输出
输出答案mod 1e9+7
输入样例
3
1
2
3
输出样例
20
解法:
统计每个数字出现的次数就好了,每个数字出现的次数为该数字左边数字的个数乘右边的。
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using namespace std;
int main()
{
long long ans = 0;
long long mod = 1e9+7;
long long n;
scanf("%lld",&n);
long long e = n;
for(int i = 1; i <=n; i++,e--)
{
long long a;
scanf("%lld", &a);
long long now = (((a*i)%mod) * e) % mod;
ans = (ans + now) % mod;
}
printf("%lld", ans);
return 0;
}