D e s c r i p t i o n Description Description
T r a i n Train Train o f of of T h o u g h t Thought Thought
通过手推几组数据,我们可以发现:
每个数会在
(
i
∗
(
n
−
i
+
1
)
)
(i * (n - i + 1))
(i∗(n−i+1))个区间里出现
其中
i
i
i为这个数在题目给出的序列中的位置,
n
n
n为序列中元素个数
所以,只要按照公式统计每个数,再全部加起来就好了
C o d e Code Code
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int n; long long x, ans = 0;
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
{
scanf("%lld", &x);
ans = (x * i * (n - i + 1) + ans) % 1000000007;
}
printf("%lld", ans);
}