版权声明:_ https://blog.csdn.net/lunch__/article/details/85039994
题意
- 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)
高中数学题我都推不出来了…
一开始没有想到要考虑两个老师隔开一个女同学的情况,先把老师当隔板放入男同学中,再把女同学当做隔板放进男同学与老师中,这部分的答案是:
这样子实际上没有算两个老师隔开一个女同学的情况,我们强制两个老师隔开一个女同学,把他们三个算整体,那么答案还要加上:
高精度的话用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)