您的位置:首页 > 其它

【BZOJ 2729】 [HNOI2012]排队

2015-03-17 17:40 204 查看

2729: [HNOI2012]排队

Time Limit: 10 Sec Memory Limit: 128 MB

Submit: 1033 Solved: 474

[Submit][Status][Discuss]

Description

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

Input

只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述。

对于 30%的数据 n≤100,m≤100

对于 100%的数据 n≤2000,m≤2000

Output

输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数。注意答案可能很大。

Sample Input

1 1

Sample Output

12

HINT

Source

day1

排列组合+高精度/python

先把男生排好,有n!种;

然后放入老师,分两种情况:

1.老师放在不同空中:

A(n+1,2)

然后就会产生n+3个空,女生就有A(n+3,m)种

答案就是n!*A(n+1,2)*A(n+3,m)

2.老师放在同一空中:

A(n+1,1)*2

老师中间必须有一个女生,还有n+2个空可放,m*A(n+2,m-1)

答案是n!*A(n+1,1)*2*m*A(n+2,m-1)

def Fac(n):
ans=1
for i in range(2,n+1):
ans*=i
return ans
def A(n,m):
if n<m:
return 0
return Fac(n)//Fac(n-m)
n,m=raw_input().split()
n=int(n)
m=int(m)
print(Fac(n)*(2*A(n+1,1)*m*A(n+2,m-1)+A(n+1,2)*A(n+3,m)))




python学习网站
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: