题目
题意超级难懂,蛋疼
题目概要
有三个人,
L
u
o
L
a
o
B
a
,
X
Y
X
,
Z
X
Y
\tt LuoLaoBa,XYX,ZXY
LuoLaoBa,XYX,ZXY ,不妨称其为
A
,
B
,
C
A,B,C
A,B,C 。
另有 2 n 2^n 2n 个人,第 i i i 个人有期待顺序,记为 f i f_i fi ,满足 { f i ( A ) , f i ( B ) , f i ( C ) } = { 1 , 2 , 3 } \{f_i(A),f_i(B),f_i(C)\}=\{1,2,3\} {fi(A),fi(B),fi(C)}={1,2,3} 。
还会告诉你一个 2 n 2^n 2n 元函数 g ( x 1 , x 2 , x 3 , … , x k ) ∈ { 0 , 1 } g(x_1,x_2,x_3,\dots,x_{k})\in\{0,1\} g(x1,x2,x3,…,xk)∈{0,1} ,其中 x i ∈ { 0 , 1 } , k = 2 n x_i\in\{0,1\},k=2^n xi∈{0,1},k=2n 。
对于 A , B A,B A,B 之间的 b a t t l e \tt battle battle ,记 x i = [ f i ( A ) > f i ( B ) ] x_i=[f_i(A)>f_i(B)] xi=[fi(A)>fi(B)] ,若 g ( x 1 , x 2 , x 3 , … , x k ) = 1 g(x_1,x_2,x_3,\dots,x_k)=1 g(x1,x2,x3,…,xk)=1 则 A A A 胜出,否则 B B B 胜出。
为了比赛的公正,数据保证 g ( 1 − x 1 , 1 − x 2 , … , 1 − x k ) = 1 − g ( x 1 , x 2 , … , x k ) g(1-x_1,1-x_2,\dots,1-x_k)=1-g(x_1,x_2,\dots,x_k) g(1−x1,1−x2,…,1−xk)=1−g(x1,x2,…,xk) (否则 A , B A,B A,B 与 B , A B,A B,A 的结果不同)。
若 f i f_i fi 均是随机的(即, ⟨ f i ( A ) , f i ( B ) , f i ( C ) ⟩ \langle f_i(A),f_i(B),f_i(C)\rangle ⟨fi(A),fi(B),fi(C)⟩ 在 { 1 , 2 , 3 } \{1,2,3\} {1,2,3} 的排列中等概率随机),求出这个事件发生的概率: A , B , C A,B,C A,B,C 两两进行 b a t t l e \tt battle battle 后,至少有一人赢了两场。
输出时乘以 6 n 6^n 6n ,这样就一定会输出一个整数。答案或许很大,最好输出对 1 0 9 + 7 10^9+7 109+7 取模的值。
数据范围与提示
n
≤
20
n\le 20
n≤20 。
思路
首先注意到, A A A 赢了两场, B , C B,C B,C 就不可能有赢了两场的情况。所以直接讨论一个人的情况,然后乘 3 3 3 就好。
讨论 C C C 对 A , B A,B A,B 的对局情况。不妨设为 a , b a,b a,b 。根据题意,显然有
g ( a ) g ( b ) = 1 g(a)g(b)=1 g(a)g(b)=1
然后我们继续讨论方案数。随便讨论一个人 i i i 吧,若 a i = 1 , b i = 0 a_i=1,b_i=0 ai=1,bi=0 ,那么唯一的可能就是 f i ( A ) > f i ( C ) > f i ( B ) f_i(A)>f_i(C)>f_i(B) fi(A)>fi(C)>fi(B) 。反之,若 a i = b i a_i=b_i ai=bi 便有两种情况。所以最后的情况数量就是
2 d ( a ⊕ b ) 2^{d(a\oplus b)} 2d(a⊕b)
其中 d d d 表示二进制下 0 0 0 的个数。所以答案是
a n s = ∑ a ∑ b 2 d ( a ⊕ b ) ⋅ g ( a ) ⋅ g ( b ) ans=\sum_{a}\sum_{b}2^{d(a\oplus b)}\cdot g(a)\cdot g(b) ans=a∑b∑2d(a⊕b)⋅g(a)⋅g(b)
啊哈,令 t x = ∑ a ⊕ b = x g ( a ) g ( b ) t_x=\sum_{a\oplus b=x}g(a)g(b) tx=∑a⊕b=xg(a)g(b) ,则
a n s = ∑ x 2 d ( x ) ⋅ t x ans=\sum_{x}2^{d(x)}\cdot t_x ans=x∑2d(x)⋅tx
而 t x t_x tx 是可以用 F W T − x o r \tt FWT-xor FWT−xor 求出来的,所以复杂度就是 O ( n ⋅ 2 n ) \mathcal O(n\cdot 2^n) O(n⋅2n) 的,战斗结束。
代码
洞洞拐,洞洞拐,请自行写出代码,请自行写出代码,OVER!