排队,打水?
题目描述
某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检。他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的)
题目简述:
n个男生,m个女生,2个老师,排成一个队列,老师不能相邻,女生不能相邻,每个人不同
算法分析
这里有一个神奇的群体叫男生,就像背景一样,没有任何要求
所以?这题实际上就是疯狂把老师和女生丢到男生之间的空里面,由于只有两个老师,我们只用分两种情况:
- 两个老师之间只有一个女生
- 两个老师之间有一坨不明觉厉的东西
那么既然是插空,那么就是排列组合乱搞咯.
算法实现
- 况一
我们既然这个状态如此死板,那我们就直接把它当做一个整体吧!
男生排列:$A_n^n$
上述总体排列:$A_{n+1}^1$(n+1是因为有n+1个空)
总体中老师排列:$A_2^2$
剩余女生排列:$A_{n+2}^{m-1}$
乘起来就完咯
- 况二
剩下直接考虑:
男生排列:$A_n^n$
老师排列:$A_{n+1}^2$
女生排列:$A_{n+3}^{m}$
又乘起来咯:
代码实现
1 |
|
Tips
数据很大,又不取模,你猜要不要高精度?