題目
傳送門 to luogu
題意超級難懂,蛋疼
題目概要
有三個人,LuoLaoBa,XYX,ZXY ,不妨稱其爲 A,B,C 。
另有 2n 個人,第 i 個人有期待順序,記爲 fi ,滿足 {fi(A),fi(B),fi(C)}={1,2,3} 。
還會告訴你一個 2n 元函數 g(x1,x2,x3,…,xk)∈{0,1} ,其中 xi∈{0,1},k=2n 。
對於 A,B 之間的 battle ,記 xi=[fi(A)>fi(B)] ,若 g(x1,x2,x3,…,xk)=1 則 A 勝出,否則 B 勝出。
爲了比賽的公正,數據保證 g(1−x1,1−x2,…,1−xk)=1−g(x1,x2,…,xk) (否則 A,B 與 B,A 的結果不同)。
若 fi 均是隨機的(即,⟨fi(A),fi(B),fi(C)⟩ 在 {1,2,3} 的排列中等概率隨機),求出這個事件發生的概率:A,B,C 兩兩進行 battle 後,至少有一人贏了兩場。
輸出時乘以 6n ,這樣就一定會輸出一個整數。答案或許很大,最好輸出對 109+7 取模的值。
數據範圍與提示
n≤20 。
思路
首先注意到,A 贏了兩場,B,C 就不可能有贏了兩場的情況。所以直接討論一個人的情況,然後乘 3 就好。
討論 C 對 A,B 的對局情況。不妨設爲 a,b 。根據題意,顯然有
g(a)g(b)=1
然後我們繼續討論方案數。隨便討論一個人 i 吧,若 ai=1,bi=0 ,那麼唯一的可能就是 fi(A)>fi(C)>fi(B) 。反之,若 ai=bi 便有兩種情況。所以最後的情況數量就是
2d(a⊕b)
其中 d 表示二進制下 0 的個數。所以答案是
ans=a∑b∑2d(a⊕b)⋅g(a)⋅g(b)
啊哈,令 tx=∑a⊕b=xg(a)g(b) ,則
ans=x∑2d(x)⋅tx
而 tx 是可以用 FWT−xor 求出來的,所以複雜度就是 O(n⋅2n) 的,戰鬥結束。
代碼
洞洞拐,洞洞拐,請自行寫出代碼,請自行寫出代碼,OVER!