【C++】Comet OJ C1100 [Contest #8]支援城市

思路解析:

如果用通常的辦法總是會顯示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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章