【结论】区间和的和

mac2024-05-16  29

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(ni+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); }
最新回复(0)