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 + 启发式合并 + 并查集 搞搞就行了 --------------------------------------------------------------------- ...
随机推荐
- canvas 制作flappy bird(像素小鸟)全流程
flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...
- 基于React,Redux以及wilddog的聊天室简单实现
本文主要是使用ReactJs和Redux来实现一个聊天功能的页面,页面极其简单.使用React时间不长,还是个noob,有不对之处欢迎大家吐槽指正. 还要指出这里没有使用到websocket等技术来实 ...
- SalesForce 记录级别安全性
对象级安全性 简档 对象级安全性提供了控制 Salesforce.com 中数据的最简单方式.使用对象级安全性 您可以防止用户查看.创 建.编辑或删除特殊类型对象的任何实例 如潜在客户或业务机会.对象 ...
- 一位资深程序员大牛给予Java初学者的学习路线建议
java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...
- Java实现单链表的各种操作
Java实现单链表的各种操作 主要内容:1.单链表的基本操作 2.删除重复数据 3.找到倒数第k个元素 4.实现链表的反转 5.从尾到头输出链表 6.找到中间节点 7.检测链表是否有环 8.在 ...
- 11、项目经理要阅读的书籍 - IT软件人员书籍系列文章
项目经理是负责软件项目的总体把控的角色.项目经理在项目中是一个管理者的角色,他需要对项目的9大领域进行学习,同时针对项目的范围.进度.沟通和风险进行处理,让项目能够按时保质保量的完成. 项目经理需要学 ...
- (五)什么是RDD-Java&Python版Spark
什么是RDD 视频教程: 1.优酷 2.YouTube RDD是个抽象类,全称为Resilient Distributed Datasets,是一个容错的.并行的数据结构,可以让用户显式地将数据存储到 ...
- (三)Spark-Hadoop集群搭建-Java&Python版Spark
Spark-Hadoop集群搭建 视频教程: 1.优酷 2.YouTube 配置java 启动ftp [root@master ~]# /etc/init.d/vsftpd restart 关闭 vs ...
- pscp工具上传或取回文件、文件夹
1.把服务器上的/root/dir目录取回本地"C:\My Documents\data\"目录 C:\>pscp.exe -r root@IP:/root/dir &quo ...
- 重写ValidateEntity虚方法实现可控的上下文验证和自定义验证
上篇文章介绍了ValidationAttribute和IValidatableObject.Validate验证,但是这种验证还是稍微简单了,对于复杂的实体,例如:继承过来的实体.实现某接口的实体等等 ...