排队题解(雾

排队题解

  • 题目

    某中学有 𝑛名男同学,𝑚 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)

    • 思路分析

    考虑使用插板法 先不考虑两位老师,相当于 n+3 个空中插 m 个板,总方案数为:

    A_{n+2}^{n+2}*A_{m}^m*C_{n+3}^m

    再使用捆绑法,把两位老师当作一名男同学,相当与 n+2 个空中插 m 个板,总方案数为:

    A_2^2*A_{n+1}^{n+1}*A_{m}^m*C_{n+2}^m

    两者相减即是答案(注意C++得使用高精度)

import sys
import math
ans=0
n,m=map(int,input().split())
def f(x):
    return math.factorial(x)
def A(x,y):
    return f(x)//f(x-y)
def C(x,y):
    return f(x)//(f(x-y)*f(y))
ans+=A(n+2,n+2)*A(m,m)*C(n+3,m)
ans-=2*A(n+1,n+1)*A(m,m)*C(n+2,m)
print(ans)

python万岁

你们来信友队是干啥的啊?

发题解时看到了