luoguP3223 [HNOI2012]排队

版权声明:_ https://blog.csdn.net/lunch__/article/details/85039994

题意

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

高中数学题我都推不出来了…

一开始没有想到要考虑两个老师隔开一个女同学的情况,先把老师当隔板放入男同学中,再把女同学当做隔板放进男同学与老师中,这部分的答案是:
A n n × A n + 1 m × A n + m + 1 2 A_n^n \times A_{n+1}^m\times A_{n+m+1}^2

这样子实际上没有算两个老师隔开一个女同学的情况,我们强制两个老师隔开一个女同学,把他们三个算整体,那么答案还要加上:
A n n × A n + 1 1 × A 2 2 × A n + 2 m 1 × A m 1 A_n^n\times A_{n+1}^1\times A_2^2\times A_{n+2}^{m-1}\times A_m^1

高精度的话用Python3实现就好了

Codes

import math

def fac(x) :
    return math.factorial(x)

def A(x, y) : 
    if x < y : return 0
    return fac(x) // fac(x - y)

n, m = map(int, input().split())
ans = A(n, n) * A(n + 1, 2) * A(n + 3, m)
if m - 1 >= 0 : 
    ans += A(n, n) * A(n + 1, 1) * A(2, 2) * A(n + 2, m - 1) * A(m, 1)
print(ans)

猜你喜欢

转载自blog.csdn.net/lunch__/article/details/85039994