2018CCPC秦皇岛热身赛B题解: $$ \sum_{i=1,j>i}^{n}(a_j-a_i)^2$$

##2018CCPC秦皇岛热身赛B题解: ∑ i = 1 , j > i n ( a j − a i ) 2 \sum_{i=1,j>i}^{n}(a_j-a_i)^2 i=1,j>in(ajai)2

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

这里提供一个 O ( n ) O(n) O(n)的解法

T = ∑ i = 1 , j > i n ( a j − a i ) 2 T=\sum_{i=1,j>i}^{n}(a_j-a_i)^2 T=i=1,j>in(ajai)2
则有 T + 0 + T = ∑ i = 1 , j > i n ( a j − a i ) 2 + ∑ i = 1 , j = i n ( a j − a i ) 2 + ∑ i = 1 , j < i n ( a j − a i ) 2 T+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 T+0+T=i=1,j>in(ajai)2+i=1,j=in(ajai)2+i=1,j<in(ajai)2
= ∑ i = 1 , j = 1 n ( a j − a i ) 2 =\sum_{i=1,j=1}^{n}(a_j-a_i)^2 =i=1,j=1n(ajai)2
= ∑ i = 1 , j = 1 n a i 2 + ∑ i = 1 , j = 1 n a j 2 − 2 ∗ ∑ i = 1 , j = 1 n a i ∗ a j =\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} =i=1,j=1nai2+i=1,j=1naj22i=1,j=1naiaj
= n ∗ ∑ i = 1 n a i 2 + n ∗ ∑ j = 1 n a j 2 − 2 ∗ ∑ i = 1 n a i ∗ ∑ j = 1 n a j =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} =ni=1nai2+nj=1naj22i=1naij=1naj
S 1 = ∑ i = 1 n a i S_1=\sum_{i=1}^{n}{a_i} S1=i=1nai
S 2 = ∑ i = 1 n a i 2 S_2=\sum_{i=1}^{n}{a_i^2} S2=i=1nai2
2 ∗ T = 2 ∗ n ∗ S 2 − 2 ∗ S 1 2*T=2*n*S_2-2*S_1 2T=2nS22S1
T = n ∗ S 2 − S 1 T=n*S_2-S_1 T=nS2S1
这样构造出 a i a_i ai的部分和 S 1 S_1 S1和平方部分和 S 2 S_2 S2后就可以直接计算出 T T T

你可能感兴趣的:(算法和数据结构,数学,题解)