题意
\(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]))