建设道路


算贡献

完全平方公式展开,(a+b)²=a²﹢2ab+b²

对于本题来说,第一个数会与第二个...第n个,也就是(n-1)次 平方

同理,对于2*a*b开说,

第一个数字*(第二个+第三个+......第n个)

还要注意mod问题,为了防止溢出和出现负数,加mod

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 const int maxn = 5e5 + 10;
 5 const int mod = 1e9 + 7;
 6 int n,a[maxn];
 7 int sum,ans;
 8 signed main(){
 9     //freopen("in","r",stdin);
10     scanf("%lld",&n);
11     for(int i=1;i<=n;i++)
12         scanf("%lld",&a[i]),sum=(sum+a[i])%mod;
13 
14     for(int i=1;i<=n;i++){
15        ans = (ans + (n - 1) * a[i]  % mod * a[i] % mod) % mod;
16        sum = (sum - a[i] + mod) % mod;//防止溢出
17        ans = (ans - 2 * sum  % mod * a[i] % mod + mod) % mod;
18     }
19     printf("%lld",ans);
20     return 0;
21 }
View Code
原文地址:https://www.cnblogs.com/xcfxcf/p/12730269.html