题意
(n)个男生(m)个女生(2)个老师排列,任意两个女生不能相邻,两个老师也不能相邻,每个人都不同。问有多少种排法。((n, m le 2000))
分析
组合乱搞。
题解
先放男生:(A(n, n))种方案,(n+1)格空隙
两个老师不挨在一起放入男生中。
先放老师:(n+1)个空隙里放2个老师的方案:(A(n+1, 2))
接着放女生:(n+3)个空隙里放m个女生的方案:(A(n+3, m))
总方案:(A(n, n) * A(n+1, 2) * A(n+3, m))
两个老师挨在一起放入男生中:
将一个女生拿出来插到老师中间将这三个人看成男生:
总方案:(A(n+1, n+1) * A(2, 2) * m * A(n+2, m-1))
所以(ans=A(n, n) * A(n+1, 2) * A(n+3, m)+A(n+1, n+1) * A(2, 2) * m * A(n+2, m-1))
(n+3<m)时,(ans=0)
n, m=map(int, raw_input().split())
if n+3<m:
print("0")
else:
p=[0 for i in range(0, n+3+1)]
p[0]=p[1]=1
for i in range(2, n+3+1):
p[i]=p[i-1]*i
print(p[n]*(p[n+1]/p[n-1])*(p[n+3]/p[n+3-m]) + 2*m*p[n+1]*(p[n+2]/p[n+3-m]))