思路解析:
如果用通常的辦法總是會顯示TLE(Time Limit Exceeded),爲了降低複雜度,可以如下計算:
關鍵是把每一個(a[i] - a[x])^2的和分解開來去算:
每一項a[i]^2的和做一項,a[x]的和做一項,2*a[i]a[x]做一項;
三項分開計算後相加就能避免TLE
代碼如下:
#include <iostream>
#define LL long long
using namespace std;
int main()
{
LL n,sum = 0,sum1 = 0;
cin >> n;
LL a[n];
for(int i = 0 ; i < n ; i ++){
cin >> a[i];
sum += a[i] * a[i];
sum1 += a[i];
}
for(int i = 0 ; i < n ; i ++){
LL t = 0;
t = sum + n * a[i] * a[i] - 2 * a[i] * sum1;
if(i != n-1) cout << t << " ";
else cout << t;
}
return 0;
}