2018CCPC秦皇島熱身賽B題解: $$ \sum_{i=1,j>i}^{n}(a_j-a_i)^2$$

##2018CCPC秦皇島熱身賽B題解: i=1,j>in(ajai)2 \sum_{i=1,j>i}^{n}(a_j-a_i)^2

暴力法O(n2)O(n^2)比較容易想到,不再贅述

這裏提供一個O(n)O(n)的解法

T=i=1,j>in(ajai)2T=\sum_{i=1,j>i}^{n}(a_j-a_i)^2
則有T+0+T=i=1,j>in(ajai)2+i=1,j=in(ajai)2+i=1,j<in(ajai)2T+0+T=\sum_{i=1,j>i}^{n}(a_j-a_i)^2+\sum_{i=1,j=i}^{n}(a_j-a_i)^2+\sum_{i=1,j<i}^{n}(a_j-a_i)^2
=i=1,j=1n(ajai)2=\sum_{i=1,j=1}^{n}(a_j-a_i)^2
=i=1,j=1nai2+i=1,j=1naj22i=1,j=1naiaj=\sum_{i=1,j=1}^{n}{a_i^2}+\sum_{i=1,j=1}^{n}{a_j^2}-2*\sum_{i=1,j=1}^{n}{a_i*a_j}
=ni=1nai2+nj=1naj22i=1naij=1naj=n*\sum_{i=1}^{n}{a_i^2}+n*\sum_{j=1}^{n}{a_j^2}-2*\sum_{i=1}^{n}{a_i}*\sum_{j=1}^{n}{a_j}
S1=i=1naiS_1=\sum_{i=1}^{n}{a_i}
S2=i=1nai2S_2=\sum_{i=1}^{n}{a_i^2}
2T=2nS22S12*T=2*n*S_2-2*S_1
T=nS2S1T=n*S_2-S_1
這樣構造出aia_i的部分和S1S_1和平方部分和S2S_2後就可以直接計算出TT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章