题
算贡献
完全平方公式展开,(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 }