0475 音乐节
* * * *
拉格朗日计划
* * * *
音乐节

$12n$个音乐家参加了一场音乐节。第一天,他们组成了$3n$个四重奏,并演奏了一整天。

这一天的演奏简直是场灾难,总之,在当天演出结束时,所有的音乐家就都决定不再和这一天一同演奏四重奏的其它音乐家合作。

第二天,他们又组成了$4n$个三重奏,每位音乐家都避开了第一天的合作者。

令$f(12n)$为这$12n$位音乐家次日组成三重奏的方法总数。可以验证$f(12)=576, f(24) \bmod 10^9+7=509089824$。

求$f(600) \bmod 10^9+7$。

本题难度:



解答

给定$n$,组成四重奏的方式有 $$C_4(n)=\frac{(12n)!}{(4!)^{3n}(3n)!},$$ 种,组成三重奏的方式有 $$C_3(n)=\frac{(12n)!}{(3!)^{4n}(4n)!},$$ 种。设对每种四重奏的分法,共有$F_n$种符合要求的三重奏分法,同样那个设对每种三重奏的分法,共有$G_n$种符合要求的三重奏分法,则有 $$F_nC_4(n)=G_nC_3(n),$$ 这是因为可将题目要求理解为在分别有$C_4(n)$和$C_3(n)$个顶点的二分图中添加边所得的正则二分图(Biregular graph)。从而 $$f(12n)=F_n=G_n\times 24^{3n}\times(4n)! $$ $G_n$的值可以递推计算,最终结果是$75780067$。

注:为便于用内建函数pow作快速幂,以下代码为Python 3。

N=600

mod=10**9+7

f=lambda m,k:(1,m,m*(m-1)//2,m*(m-1)*(m-2)//6,m*(m-1)*(m-2)*(m-3)//24)[k]

sList=[(4,0,0),(3,1,0),(3,0,1),(2,2,0),(2,1,1),(2,0,2),(1,3,0),(1,2,1),(1,1,2),(1,0,3),(0,4,0),(0,3,1),(0,2,2),(0,1,3),(0,0,4)]

d={(N//3,0,0):1}
for i in range (N//4):
    d2={}
    for (p,q,r),s in d.items():
        for u,v,w in sList:
            if u<=p and v<=q and w<=r:
                k=(p-u,q-v+u,r-w+v)
                d2[k]=(d2.get(k,0)+f(p,u)*f(q,v)*f(r,w)*s)%mod
    d=d2

x=1
for k in range(2,N//3+1):
    x=x*k%mod

print(d[(0,0,0)]*pow(24,N//4,mod)*pow(x,mod-2,mod)%mod)