bzoj 2729: [HNOI2012]排队
2729: [HNOI2012]排队
Time Limit: 10 Sec Memory Limit: 128 MB
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
题目分析
显然此题是一道组合题,我们先放男生,再分两种情况讨论。
当老师被男同学隔开时,有\(A_{n+1}^2\)种方案,此时老师便与男生等价。女生有\(A_{n+3}^m\)种方案。
当老师被女同学隔开时,有\(2 \times (n+1)\)种方案,此时老师中间必须有女生,所以女生必有一个在老师中,方案数为\(m \times A_{n+2}^{m-1}\)。
所以总方案数为\(n! \times (A_{n+1}^2 \times A_{n+3}^m + 2 \times (n+1) \times m \times A_{n+2}^{m-1})\)
蒟蒻高精度写挂了,查了好久才发现加法写挂,写完后发现被python操飞
#include <cstdio>
#include <cstring>
#define base 10000
struct bign{
int len,a[10008];
bign() {memset(a,0,sizeof a); len=1;}
void Out() const {
printf("%d",a[len]);
for(int i=len-1;i;--i) printf("%04d",a[i]);
puts("");
}
void clear() {memset(a,0,sizeof a); len=1;}
void fo() {
while(a[len+1])++len;
while(!a[len]&&len>1)--len;
}
bign operator + (const bign &b) const {
bign ret;
ret.len=(len<b.len)?b.len:len;
for(int i=1;i<=ret.len;++i) {
ret.a[i]+=a[i]+b.a[i];
if(ret.a[i] >= base) ++ret.a[i+1],ret.a[i]-=base;
}ret.fo();
return ret;
}
bign operator * (const int &b) const {
bign ret; ret.len=len;
for(int i=1;i<=len;++i) {
ret.a[i]+=a[i]*b;
ret.a[i+1]+=ret.a[i]/base;
ret.a[i]%=base;
}ret.fo();
return ret;
}
};
void A(int n,int m,bign &a) {
if(n<m) a=a*0;
else for(int i=n-m+1;i<=n;++i) a=a*i;
}
int main() {
int n,m; bign a,b;
scanf("%d%d",&n,&m);
a.a[1]=1; b.a[1]=2;
A(n+1,2,a); //a.Out();
A(n+3,m,a); //a.Out();
A(n+1,1,b); //b.Out();
A(n+2,m-1,b); //b.Out();
b=b*m; //b.Out();
a=a+b; /*a.Out();*/ A(n,n,a);
a.Out(); return 0;
}
def A(n,m):
if n<m:
return 0
ret=1
for i in range(n-m+1,n+1):
ret *= i
return ret
n,m=raw_input().split()
n=int(n)
m=int(m)
print (A(n,n)*(A(n+1,2)*A(n+3,m)+2*m*A(n+1,1)*A(n+2,m-1)))
bzoj 2729: [HNOI2012]排队的更多相关文章
- BZOJ 2729: [HNOI2012]排队 排列组合 + 高精度
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- 2729: [HNOI2012]排队
2729: [HNOI2012]排队 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 957 Solved: 449[Submit][Status] ...
- 2729:[HNOI2012]排队 - BZOJ
题目描述 Description某中学有n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人 ...
- 【BZOJ】2729: [HNOI2012]排队
题意 \(n\)个男生\(m\)个女生\(2\)个老师排列,任意两个女生不能相邻,两个老师也不能相邻,每个人都不同.问有多少种排法.(\(n, m \le 2000\)) 分析 组合乱搞. 题解 先放 ...
- 【BZOJ2729】[HNOI2012]排队 组合数
[BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...
- BZOJ 2733: [HNOI2012]永无乡 启发式合并treap
2733: [HNOI2012]永无乡 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...
- bzoj 2734: [HNOI2012]集合选数 状压DP
2734: [HNOI2012]集合选数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 560 Solved: 321[Submit][Status ...
- bzoj 2733: [HNOI2012]永无乡 离线+主席树
2733: [HNOI2012]永无乡 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1167 Solved: 607[Submit][Status ...
- BZOJ 2733: [HNOI2012]永无乡(treap + 启发式合并 + 并查集)
不难...treap + 启发式合并 + 并查集 搞搞就行了 --------------------------------------------------------------------- ...
随机推荐
- Android 弱引用和软引用
软引用 和 弱引用 1. SoftReference<T>:软引用-->当虚拟机内存不足时,将会回收它指向的对象:需要获取对象时,可以调用get方法. 2. WeakRefere ...
- iOS 自定义方法 - 播放GIF
示例代码 ///////////////////////第一种/////////////////////// //// GifView.h// GIFViewer//// Created by ...
- 因为没用过,所以没想过的--goto
今天读了读 Rui Maciel 大神写的 mjson parser,mjson 解析器是一个使用 ISO C 实现的小型 JSON 解析器.嵌入式项目中使用到了该解析器,随即拿出来看看. 看到如下代 ...
- 脱离spring集成cxf(基于nutz框架)
什么是webService WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理论资料: http://blog.csdn.net/wooshn/article/details/8 ...
- Scala基础语法 (一)
如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...
- php将对象数组转成普通数组
不知道为什么,把数组序列化为json,然后存到redis(string类型).然后再取出来反序列化为数组,就变成对象数组了 thinkPHP普通数组取值$arr['key'] 对象数组取值$arr-& ...
- 创建agsXMPP 自定义packet types
在网上看了好多文章基本都是转载 没有能成功运行的,又没有别的资料,很是费解,无奈之下只好潜心研究,最终总结了几个要点给大家分享下,以免再次多浪费时间 agsXMPP是什么就不多描述了,重点说下我在创建 ...
- 基于TCP的网络编程
HTTP协议,FTP协议等很多广泛应用的协议均基于TCP协议.TCP编程主要为C/S模式,客户端和服务器之间的程序设计存在较大差异. TCP编程框图 服务器调用socket().bind().list ...
- 运行nltk示例 Resource u'tokenizers punkt english.pickle' not found解决
nltk安装完毕后,编写如下示例程序并运行,报Resource u'tokenizers/punkt/english.pickle' not found错误 import nltk sentence ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...