题目: 输入一个长度为𝑛的数组𝑎,𝑎包括(𝑛−1)𝑛/2个区间。每个区间所有数的和,被称为区间和,求所有(𝑛−1)𝑛/2个区间和的和。由于数值较大,输出mod 1e9+7的结果。
输入 第一行一个整数n,表示数组长度(2<=n<=100000) 接下来n行,每行一个整数ai,表示数组的内容。(0<=ai<=50000) 输出 输出答案mod 1e9+7 输入样例 3 1 2 3 输出样例 20 解法: 统计每个数字出现的次数就好了,每个数字出现的次数为该数字左边数字的个数乘右边的。 代码:
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;
}