上海市计算机学会竞赛平台第六届上海市青少年算法竞赛网络赛(青年组)平方的和
题目描述
给定 nn 个整数 a1,a2,⋯ ,ana1,a2,⋯,an,请求出两两数字和的平方的和,也就是
∑1≤i<j≤n(ai+aj)21≤i<j≤n∑(ai+aj)2
由于这个数字比较大,输出答案模 1,000,000,0071,000,000,007 的余数。
输入格式
- 第一行:单个整数 nn
- 第二行:nn 个整数 a1,a2,…,ana1,a2,…,an
输出格式
- 单个整数:表示和模 1,000,000,0071,000,000,007 的余数。
数据范围
- 30%30% 的数据,1≤n≤1001≤n≤100,0≤ai<1000≤ai<100
- 60%60% 的数据,1≤n≤100001≤n≤10000,0≤ai<100000≤ai<10000
- 100%100% 的数据,1≤n≤1,000,0001≤n≤1,000,000,0≤ai<1,000,0000≤ai<1,000,000
样例数据
输入:
3
1 2 3
输出:
50
说明:
3*3+4*4+5*5
详见代码:
#include <bits/stdc++.h>
using namespace std;
int n;
long long a[1000005];
long long ans = 0;
const int mod = 1e9 + 7;
int main()
{cin >> n;for(int i = 1; i <= n; i++) {cin >> a[i];ans += a[i] * a[i] % mod * (n - 1) % mod;ans += a[i] * a[i - 1] * 2 % mod;ans %= mod;a[i] += a[i - 1];a[i] %= mod;}cout << ans;return 0;
}