建设道路

建设道路

http://www.nowcoder.com/questionTerminal/372e8f883a554bc48fab293552dea52c

思路

通过读题我们很容易看出他就是让我们求这么一个东西:

我们把后边的完全平方公式展开就是:

显然我们还可以把 提出来

显然后边的我们可以提前用前缀和处理

我们用sum[i]表示对a[i]数组的前缀和,用sum2表示对的前缀和

那么原来的式子就能化成:

最后的时候注意取膜就行了

code

#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <algorithm>

#define ll long long
#define N 500010
#define M 1010

using namespace std;
const int mod = 1000000007;
int n;
ll a[N], sum[N], sum2[N];

ll read() {
    ll s = 0, f = 0; char ch = getchar();
    while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
    while (isdigit(ch)) s = s * 10 + (ch ^ 48), ch = getchar();
    return f ? -s : s;
}

int main() {
    n = read();
    for (int i = 1; i <= n; i++) {
        a[i] = read();
        sum[i] = (sum[i - 1] + a[i]) % mod;
        sum2[i] = (sum2[i - 1] + (a[i] * a[i]) % mod) % mod;
    }
    ll ans = 0;
    for (int i = 1; i <= n; i++) {
        ll x1 = ((n - i) * ((a[i] * a[i]) % mod)) % mod;
        ll x2 = ((2 * a[i] % mod) * ((sum[n] - sum[i] + mod) % mod)) % mod;
        ll x3 = (sum2[n] - sum2[i] + mod) % mod;
        ll x = (x1 - x2 + x3 + mod) % mod;
        ans = (ans + x) % mod;
    }
    cout << ans;
}
全部评论

相关推荐

04-05 21:13
邯郸学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
三题看不懂四题不明白二题无法AC&nbsp;T=int(input())&nbsp;for&nbsp;_&nbsp;in&nbsp;range(T):&nbsp;n=int(input())&nbsp;s=input().split()&nbsp;k,mx=1,1&nbsp;for&nbsp;i&nbsp;in&nbsp;range(len(s)-1):&nbsp;if&nbsp;len(s[i])&lt;len(s[i+1]):&nbsp;k+=1&nbsp;elif&nbsp;len(s[i])==len(s[i+1]):&nbsp;if&nbsp;s[i]&lt;=s[i+1]:&nbsp;k+=1&nbsp;...
恭喜臭臭猴子:第二题用栈就行。合法的括号直接出栈了,剩下的是不合法的,肯定都得一个一个走。出入栈的过程中得记下进栈的括号的下标。最后栈里剩下的括号如果相邻两个的下标不连续,说明它们中间有一个合法的括号序列被出栈,结果加一
投递拼多多集团-PDD等公司10个岗位 > 拼多多求职进展汇总 笔试
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务