【BZOJ2729】【HNOI2012】排队 组合数 数论 Python高精度

转载请注明出处谢谢:http://blog.csdn.net/vmurder/article/details/42964151

题解:

代码里面有注释。

注意:

Python2中的中文字符即使注释了,也会CE(当然,因为Python是直接运行,不编译,所以显示WA)

呃,而本地的Python3就不管它了。。

所以我的代码需要删掉中文注释再交233。

代码:

# n!(A(n+1,2)*A(n+3,m)+2*(n+1)*A(n+2,m-1)*m)

# 首先男生随便放 这样是n!种摆法。
# 然后再加上俩老师,就有了n+3个放女生的位置,
# 	也就是女生有A(n+3,m)种放法,但是老师的位置则应该是A(n+1,2)
# 然后若两老师扔到男生中时重复了,那么就需要中间插个女生
# 	也就是女生有A(n+2,m-1)种插法,而老师则是(n+1)种方法,
# 		注意此时需要枚举是哪个女生被放到老师中间,这有m种情况。
#			呃,两个老师也是不同的,所以此时需要再*2
# 这两种老师的放法是不重复且包括所有情况的
# 	也就是我们再如上述处理两种老师放法时女生的排列数
# 		就可以出解且包括所有情况。
# 	By YGY(id:18357)

def mul(x, y):
	re = 1
	for i in range (x, y + 1):
		re = re * i
	return re

n, m = raw_input().split()
n = int(n); m = int(m)
#print(mul(1,n)*((n+1)*n*mul(n+3-m+1,n+3)+2*(n+1)*m*mul(n+2-m+2,n+2)))
print(mul(1,n+1)*mul(n+4-m,n+2)*(n*(n+3)+2*m))
时间: 2024-08-10 19:19:10

【BZOJ2729】【HNOI2012】排队 组合数 数论 Python高精度的相关文章

【BZOJ2729】[HNOI2012]排队 组合数

[BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n≤100,m≤100 对于 100%的数据 n≤2000,m≤2000 Output 输出文件 output.txt 仅包含一个非负整数,表示不

bzoj2729: [HNOI2012]排队

高精度+排列组合. 如果计算老师能挨在一起的情况 有 (n+2)! * A(n+3,m) 老师一定挨宰一起的情况 有 2*(n+1)!*A(n+2,m). 相减就是答案. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 3000; const int mod = 10000; struct bigint { int a[maxn+10

2729: [HNOI2012]排队

2729: [HNOI2012]排队 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 957  Solved: 449[Submit][Status] Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%

[HNOI2012]排队

Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Input 只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述. 对于 30%的数据 n≤100,m≤100 对于 100%的数据 n≤2000,m≤2000 Output 输出文件 output.txt 仅包含一个非负整数,表示不同的排法个数.注意答案可能很大. Sample

[BZOJ 2729][HNOI2012]排队(排列组合+高精)

Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) Solution 好像必须写压位高精的QAQ 先排n名男生,插空,讨论两名老师插在两个不同的空里的情况和先排在一起再在中间插一名女生的情况 #include<iostream> #include<cstdio> #include<cstring> #include&

【BZOJ】2729: [HNOI2012]排队

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2729 先考虑放好男生,一共有:${n!}$种放法. 然后分情况考虑老师的放法: 1.如果两个老师放在了相同两个男生之间:${m*A_{n+1}^{1}*A_{n+2}^{m-1}}$ 2.如果分开放:${A_{n+1}^{2}*A_{n+3}^{m}}$ 最后答案分别与${n!}$相乘再相加即可. HNOI居然会考送肉组合数学裸题... python大发好!

数论 : 高精度 --- UVa 10183 : How Many Fibs ?

How many Fibs? Description Recall the definition of the Fibonacci numbers: f1 := 1 f2 := 2 fn := f n-1 + f n-2 (n>=3) Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a,b]. Input The input contains several test cases.

数论-FFT高精度乘法

NKOJ3071 模板题:求两个整数之积. FFT 函数里 ty = 1 表示 DFT 运算,ty = -1 表示 IDFT 运算. 1 #include <stdio.h> 2 #include <complex> 3 4 using namespace std; 5 6 typedef complex<double> CP; 7 typedef long long LL; 8 9 const int _N = 300005; 10 const double PI =

BZOJ 2729 HNOI2012 排队 组合数学

题目大意:给定n个男生m个女生两个老师,求有多少种排列满足任意两个女生不相邻,任意两个老师也不相邻 def A(n): re=1 for i in range(1,n+1): re*=i return re def C(n,m): if n<m: return 0 return A(n)//A(m)//A(n-m) n,m=[int(i) for i in raw_input().split()] print m*A(n+1)*2*A(m-1)*C(n+2,m-1)+(A(n+2)-A(n+1)