acm-(推式子、好題、數學、排列計數)2020ICPC·小米 網路選拔賽第一場 H.Grouping

&*^*&(發表於2020-10-29

題面
傳送門
先將 a i a_i ai從小到大排序。
然後這裡有一些符號約定:

g g g表示一個分組,
w g = ∣ a i − a j ∣ w_g=|a_i-a_j| wg=aiaj表示某個組 g g g的權值,
G G G表示所有分組構成的一個不重集,
m m m表示一種對序列的分組方案,
w m ‾ = 1 n ∑ g ∈ m w g \overline{w_m}=\frac 1n\sum_{g\in m}w_g wm=n1gmwg表示分組方案 m m m中各個組權值的平均數,
W m = 1 n ∑ g ∈ m ( w g − w m ‾ ) 2 W_m=\frac 1n\sum_{g\in m}(w_g-\overline{w_m})^2 Wm=n1gm(wgwm)2表示分組方案 m m m的權值(見題目定義),
M M M表示所有分組方案構成的一個不重集,
s u m [ n ] = ∑ i = 1 n a i sum[n]=\sum_{i=1}^na_i sum[n]=i=1nai代表字首和。

於是我們要求的其實就是
a n s = 1 ∣ M ∣ ∑ m ∈ M W m = 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m ( w g 2 − 2 w g w m ‾ + w m ‾ 2 ) = 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 − 1 n ∣ M ∣ ∑ m ∈ M w m ‾ ∑ g ∈ m ( 2 w g − w m ‾ ) = 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 − 1 n ∣ M ∣ ∑ m ∈ M 1 n [ ∑ g ∈ m w g ] [ 2 ∑ g ∈ m w g − ∑ g ∈ m w m ‾ ] = 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 − 1 n 2 ∣ M ∣ ∑ m ∈ M [ ∑ g ∈ m w g ] [ 2 ∑ g ∈ m w g − ∣ m ∣ w m ‾ ] = 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 − 1 n 2 ∣ M ∣ ∑ m ∈ M [ ∑ g ∈ m w g ] [ 2 ∑ g ∈ m w g − ∑ g ∈ m w g ] = 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 − 1 n 2 ∣ M ∣ ∑ m ∈ M [ ∑ g ∈ m w g ] [ ∑ g ∈ m w g ] = 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 − 1 n 2 ∣ M ∣ ∑ m ∈ M ( ∑ g ∈ m w g ) 2 \begin{aligned} ans&=\frac 1{|M|}\sum_{m\in M}W_m\\ &=\frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}(w_g^2-2w_g\overline{w_m}+\overline{w_m}^2)\\ &=\frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2-\frac 1{n|M|}\sum_{m\in M}\overline{w_m}\sum_{g\in m}(2w_g-\overline{w_m})\\ &=\frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2-\frac 1{n|M|}\sum_{m\in M}\frac 1n[\sum_{g\in m}w_g][2\sum_{g\in m}w_g-\sum_{g\in m}\overline{w_m}]\\ &=\frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2-\frac 1{n^2|M|}\sum_{m\in M}[\sum_{g\in m}w_g][2\sum_{g\in m}w_g-|m|\overline{w_m}]\\ &=\frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2-\frac 1{n^2|M|}\sum_{m\in M}[\sum_{g\in m}w_g][2\sum_{g\in m}w_g-\sum_{g\in m}w_g]\\ &=\frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2-\frac 1{n^2|M|}\sum_{m\in M}[\sum_{g\in m}w_g][\sum_{g\in m}w_g]\\ &=\frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2-\frac 1{n^2|M|}\sum_{m\in M}(\sum_{g\in m}w_g)^2\\ \end{aligned} ans=M1mMWm=nM1mMgm(wg22wgwm+wm2)=nM1mMgmwg2nM1mMwmgm(2wgwm)=nM1mMgmwg2nM1mMn1[gmwg][2gmwggmwm]=nM1mMgmwg2n2M1mM[gmwg][2gmwgmwm]=nM1mMgmwg2n2M1mM[gmwg][2gmwggmwg]=nM1mMgmwg2n2M1mM[gmwg][gmwg]=nM1mMgmwg2n2M1mM(gmwg)2

接下來分對答案式子中的兩個部分分別求解。

對於第一部分 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 \frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2 nM1mMgmwg2,首先由於每個組出現的可能性相同,我們有 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 = 1 ∣ G ∣ ∑ g ∈ G w g 2 \frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2=\frac 1{|G|}\sum_{g\in G}w_g^2 nM1mMgmwg2=G1gGwg2
其中 ∣ G ∣ = 2 n ( 2 n − 1 ) 2 = n ( 2 n − 1 ) |G|=\frac {2n(2n-1)}{2}=n(2n-1) G=22n(2n1)=n(2n1)
∑ g ∈ G w g 2 = ∑ i = 1 2 n ∑ j = i + 1 2 n ( a i 2 + a j 2 − 2 a i a j ) = ∑ i = 1 2 n ∑ j = i + 1 2 n a i 2 + ∑ i = 1 2 n ∑ j = i + 1 2 n a j 2 − ∑ i = 1 2 n ∑ j = i + 1 2 n 2 a i a j = ∑ i = 1 2 n ( 2 n − i ) a i 2 + ∑ i = 1 2 n ( i − 1 ) a i 2 − ∑ i = 1 2 n 2 a i s u m [ i − 1 ] = ∑ i = 1 2 n ( 2 n − 1 ) a i 2 + ∑ i = 1 2 n 2 a i s u m [ i − 1 ] \begin{aligned} \sum_{g\in G}w_g^2&=\sum_{i=1}^{2n}\sum_{j=i+1}^{2n}(a_i^2+a_j^2-2a_ia_j)\\ &=\sum_{i=1}^{2n}\sum_{j=i+1}^{2n}a_i^2+\sum_{i=1}^{2n}\sum_{j=i+1}^{2n}a_j^2-\sum_{i=1}^{2n}\sum_{j=i+1}^{2n}2a_ia_j\\ &=\sum_{i=1}^{2n}(2n-i)a_i^2+\sum_{i=1}^{2n}(i-1)a_i^2-\sum_{i=1}^{2n}2a_isum[i-1]\\ &=\sum_{i=1}^{2n}(2n-1)a_i^2+\sum_{i=1}^{2n}2a_isum[i-1]\\ \end{aligned} gGwg2=i=12nj=i+12n(ai2+aj22aiaj)=i=12nj=i+12nai2+i=12nj=i+12naj2i=12nj=i+12n2aiaj=i=12n(2ni)ai2+i=12n(i1)ai2i=12n2aisum[i1]=i=12n(2n1)ai2+i=12n2aisum[i1]
因此對於第一部分我們有 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 = 1 n ( 2 n − 1 ) [ ∑ i = 1 2 n ( 2 n − 1 ) a i 2 + ∑ i = 1 2 n 2 a i s u m [ i − 1 ] ] \frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2=\frac 1{n(2n-1)}[\sum_{i=1}^{2n}(2n-1)a_i^2+\sum_{i=1}^{2n}2a_isum[i-1]] nM1mMgmwg2=n(2n1)1[i=12n(2n1)ai2+i=12n2aisum[i1]]成立,這個式子顯然可以 O ( n ) O(n) O(n)求解。

然後再來看第二部分 1 n 2 ∣ M ∣ ∑ m ∈ M ( ∑ g ∈ m w g ) 2 \frac 1{n^2|M|}\sum_{m\in M}(\sum_{g\in m}w_g)^2 n2M1mM(gmwg)2,設 T n = ∣ M ∣ T_n=|M| Tn=M,它代表將 2 n 2n 2n個數兩兩分成一組的方案數,根據乘法原理不難知道 T n = ( 2 n − 1 ) ! ! T_n=(2n-1)!! Tn=(2n1)!!

還是先推式子:
1 n 2 ∣ M ∣ ∑ m ∈ M ( ∑ g ∈ m w g ) 2 = 1 n 2 ∣ M ∣ ∑ m ∈ M ( ∑ g ∈ m w g 2 + ∑ g ≠ h ∈ m 2 w g w h ) = 1 n 2 ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 + 1 n 2 ∣ M ∣ ∑ m ∈ M ∑ g ≠ h ∈ m 2 w g w h \begin{aligned} \frac 1{n^2|M|}\sum_{m\in M}(\sum_{g\in m}w_g)^2&=\frac 1{n^2|M|}\sum_{m\in M}(\sum_{g\in m}w_g^2+\sum_{g\ne h\in m}2w_gw_h)\\ &=\frac 1{n^2|M|}\sum_{m\in M}\sum_{g\in m}w_g^2+\frac 1{n^2|M|}\sum_{m\in M}\sum_{g\ne h\in m}2w_gw_h\\ \end{aligned} n2M1mM(gmwg)2=n2M1mM(gmwg2+g=hm2wgwh)=n2M1mMgmwg2+n2M1mMg=hm2wgwh
注意到 1 n 2 ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 \frac 1{n^2|M|}\sum_{m\in M}\sum_{g\in m}w_g^2 n2M1mMgmwg2這一項其實就是 1 n ⋅ 1 n ∣ M ∣ ∑ m ∈ M ∑ g ∈ m w g 2 = 1 n ⋅ 第 一 部 分 \frac 1n\cdot \frac 1{n|M|}\sum_{m\in M}\sum_{g\in m}w_g^2=\frac 1n\cdot 第一部分 n1nM1mMgmwg2=n1,因此可以直接根據第一部分得出它的值,那麼第二項我們再單獨考慮,也就是 1 n 2 ∣ M ∣ ∑ m ∈ M ∑ g ≠ h ∈ m 2 w g w h \frac 1{n^2|M|}\sum_{m\in M}\sum_{g\ne h\in m}2w_gw_h n2M1mMg=hm2wgwh,方便起見我們先算出 ∑ m ∈ M ∑ g ≠ h ∈ m 2 w g w h \sum_{m\in M}\sum_{g\ne h\in m}2w_gw_h mMg=hm2wgwh。注意到對於所有的 2 w g w h , h ≠ g 2w_gw_h,h\ne g 2wgwh,h=g而言,它會在所有的分組方案中出現 T n − 2 T_{n-2} Tn2次,因此不妨求出所有互不相同的 2 w g w h 2w_gw_h 2wgwh的總和,然後再乘以 T n − 2 T_{n-2} Tn2即可。而且注意到 2 w g w h 2w_gw_h 2wgwh一定是某一個分配方案中的交叉項,所以絕對不會出現 g g g h h h這兩個組的某一個元素編號相同的情況,因此我們可以將所有互不相同的且符合條件的 2 w g w h 2w_gw_h 2wgwh表示成 ∑ i = 1 2 n ∑ j = i + 1 2 n ∑ k = i + 1 , k ≠ j 2 n ∑ l = k + 1 , k ≠ j 2 n 2 ∣ a i − a j ∣ ∣ a k − a l ∣ \sum_{i=1}^{2n}\sum_{j=i+1}^{2n}\sum_{k=i+1,k\ne j}^{2n}\sum_{l=k+1,k\ne j}^{2n}2|a_i-a_j||a_k-a_l| i=12nj=i+12nk=i+1,k=j2nl=k+1,k=j2n2aiajakal,求出這個式子後乘以 T n − 2 T_{n-2} Tn2就是 ∑ m ∈ M ∑ g ≠ h ∈ m 2 w g w h \sum_{m\in M}\sum_{g\ne h\in m}2w_gw_h mMg=hm2wgwh

再推一波式子,運用容斥原理:
∑ i = 1 2 n ∑ j = i + 1 2 n ∑ k = i + 1 , k ≠ j 2 n ∑ l = k + 1 , k ≠ j 2 n 2 ∣ a i − a j ∣ ∣ a k − a l ∣ = ∑ i = 1 2 n ∑ j = i + 1 2 n ∑ k = 1 2 n ∑ l = k + 1 2 n ∣ a i − a j ∣ ∣ a k − a l ∣ − ∑ i = 1 2 n ( ∑ j = 1 , j ≠ i 2 n ∣ a i − a j ∣ ) 2 + ∑ i = 1 2 n ∑ j = i + 1 2 n ∣ a i − a j ∣ 2 = ( ∑ g ∈ G w g ) 2 − ∑ i = 1 2 n ( ( i − 1 ) a i − s u m [ i − 1 ] + s u m [ 2 n ] − s u m [ i ] − ( 2 n − i ) a i ) 2 + ∑ g ∈ G w g 2 \begin{aligned} \sum_{i=1}^{2n}\sum_{j=i+1}^{2n}\sum_{k=i+1,k\ne j}^{2n}\sum_{l=k+1,k\ne j}^{2n}2|a_i-a_j||a_k-a_l|&=\sum_{i=1}^{2n}\sum_{j=i+1}^{2n}\sum_{k=1}^{2n}\sum_{l=k+1}^{2n}|a_i-a_j||a_k-a_l|-\sum_{i=1}^{2n}(\sum_{j=1,j\ne i}^{2n}|a_i-a_j|)^2+\sum_{i=1}^{2n}\sum_{j=i+1}^{2n}|a_i-a_j|^2\\ &=(\sum_{g\in G}w_g)^2-\sum_{i=1}^{2n}((i-1)a_i-sum[i-1]+sum[2n]-sum[i]-(2n-i)a_i)^2+\sum_{g\in G}w_g^2\\ \end{aligned} i=12nj=i+12nk=i+1,k=j2nl=k+1,k=j2n2aiajakal=i=12nj=i+12nk=12nl=k+12naiajakali=12n(j=1,j=i2naiaj)2+i=12nj=i+12naiaj2=(gGwg)2i=12n((i1)aisum[i1]+sum[2n]sum[i](2ni)ai)2+gGwg2
解釋一下上面的推導過程, ( ∑ g ∈ G w g ) 2 (\sum_{g\in G}w_g)^2 (gGwg)2其實就是全集,包含了所有組的交叉項和平方項,不過我們要去掉那些平方項和不符合條件的交叉項,其中不符合條件的交叉項 2 w g w h 2w_gw_h 2wgwh滿足 h h h g g g組中存在一個元素編號相同,於是列舉這個相同的編號 i i i,於是可以得到 ∑ i = 1 2 n ( ∑ j = 1 , j ≠ i 2 n ∣ a i − a j ∣ ) 2 \sum_{i=1}^{2n}(\sum_{j=1,j\ne i}^{2n}|a_i-a_j|)^2 i=12n(j=1,j=i2naiaj)2,不過其中又多加了 2 2 2倍的平方項,於是還要加一個平方項 ∑ g ∈ G w g 2 \sum_{g\in G}w_g^2 gGwg2

上面式子中的 ∑ g ∈ G w g 2 \sum_{g\in G}w_g^2 gGwg2 ∑ g ∈ G w g 2 \sum_{g\in G}w_g^2 gGwg2都好求,就不多說了。

最後我們求出兩部分後作差就可以算出最終答案了。
這裡給出一份參考程式碼:

int a[maxn<<1],t[maxn],sm[maxn<<1];
int main(){
	int n=rd(),all=0,wg=0,wg2=0,G=0,nn=0,ans=0,as=0,n2=n<<1;
	FOR(i,1,n2)a[i]=rd();
	sort(a+1,a+1+2*n);
	sm[1]=a[1],wg2=1ll*(n2-1)*sqr(a[1])%mod;
	t[0]=1;
	FOR(i,2,n2){
		sm[i]=sum(sm[i-1],a[i]);
		add(wg,sub(1ll*(i-1)*a[i]%mod,sm[i-1]));
		add(wg2,sub(1ll*(n2-1)*sqr(a[i])%mod,2ll*a[i]*sm[i-1]%mod));
		if(!(i&1))t[i>>1]=1ll*t[(i>>1)-1]*(i-1)%mod;
	}
	all=sm[n2];
	G=qpow(1ll*n*(n2-1)%mod,mod-2,mod),nn=qpow(n,mod-2,mod);
	ans=sub(1ll*G*wg2%mod,1ll*nn*G%mod*wg2%mod);
	if(n==1)return wrn(ans),0;
	as=sum(1ll*wg*wg%mod,wg2);
	FOR(i,1,n2){
		dec(as,sqr(sum(sub(1ll*(i-1)*a[i]%mod,sm[i-1]),sub(sub(all,sm[i]),1ll*(n2-i)*a[i]%mod))));
	}
	as=1ll*as*t[n-2]%mod*sqr(nn)%mod*qpow(t[n],mod-2,mod)%mod;
	dec(ans,as); 
	wrn(ans);
}

相關文章