[CF850E]Random Elections

題目

傳送門 to luogu

題意超級難懂,蛋疼

題目概要
有三個人,LuoLaoBa,XYX,ZXY\tt LuoLaoBa,XYX,ZXY ,不妨稱其爲 A,B,CA,B,C

另有 2n2^n 個人,第 ii 個人有期待順序,記爲 fif_i ,滿足 {fi(A),fi(B),fi(C)}={1,2,3}\{f_i(A),f_i(B),f_i(C)\}=\{1,2,3\}

還會告訴你一個 2n2^n 元函數 g(x1,x2,x3,,xk){0,1}g(x_1,x_2,x_3,\dots,x_{k})\in\{0,1\} ,其中 xi{0,1},k=2nx_i\in\{0,1\},k=2^n

對於 A,BA,B 之間的 battle\tt battle ,記 xi=[fi(A)>fi(B)]x_i=[f_i(A)>f_i(B)] ,若 g(x1,x2,x3,,xk)=1g(x_1,x_2,x_3,\dots,x_k)=1AA 勝出,否則 BB 勝出。

爲了比賽的公正,數據保證 g(1x1,1x2,,1xk)=1g(x1,x2,,xk)g(1-x_1,1-x_2,\dots,1-x_k)=1-g(x_1,x_2,\dots,x_k) (否則 A,BA,BB,AB,A 的結果不同)。

fif_i 均是隨機的(即,fi(A),fi(B),fi(C)\langle f_i(A),f_i(B),f_i(C)\rangle{1,2,3}\{1,2,3\} 的排列中等概率隨機),求出這個事件發生的概率:A,B,CA,B,C 兩兩進行 battle\tt battle 後,至少有一人贏了兩場。

輸出時乘以 6n6^n ,這樣就一定會輸出一個整數。答案或許很大,最好輸出對 109+710^9+7 取模的值。

數據範圍與提示
n20n\le 20

思路

首先注意到,AA 贏了兩場,B,CB,C 就不可能有贏了兩場的情況。所以直接討論一個人的情況,然後乘 33 就好。

討論 CCA,BA,B 的對局情況。不妨設爲 a,ba,b 。根據題意,顯然有

g(a)g(b)=1g(a)g(b)=1

然後我們繼續討論方案數。隨便討論一個人 ii 吧,若 ai=1,bi=0a_i=1,b_i=0 ,那麼唯一的可能就是 fi(A)>fi(C)>fi(B)f_i(A)>f_i(C)>f_i(B) 。反之,若 ai=bia_i=b_i 便有兩種情況。所以最後的情況數量就是

2d(ab)2^{d(a\oplus b)}

其中 dd 表示二進制下 00 的個數。所以答案是

ans=ab2d(ab)g(a)g(b)ans=\sum_{a}\sum_{b}2^{d(a\oplus b)}\cdot g(a)\cdot g(b)

啊哈,令 tx=ab=xg(a)g(b)t_x=\sum_{a\oplus b=x}g(a)g(b) ,則

ans=x2d(x)txans=\sum_{x}2^{d(x)}\cdot t_x

txt_x 是可以用 FWTxor\tt FWT-xor 求出來的,所以複雜度就是 O(n2n)\mathcal O(n\cdot 2^n) 的,戰鬥結束。

代碼

洞洞拐,洞洞拐,請自行寫出代碼,請自行寫出代碼,OVER!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章