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]排队的更多相关文章

  1. BZOJ 2729: [HNOI2012]排队 排列组合 + 高精度

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

  2. 2729: [HNOI2012]排队

    2729: [HNOI2012]排队 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 957  Solved: 449[Submit][Status] ...

  3. 2729:[HNOI2012]排队 - BZOJ

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

  4. 【BZOJ】2729: [HNOI2012]排队

    题意 \(n\)个男生\(m\)个女生\(2\)个老师排列,任意两个女生不能相邻,两个老师也不能相邻,每个人都不同.问有多少种排法.(\(n, m \le 2000\)) 分析 组合乱搞. 题解 先放 ...

  5. 【BZOJ2729】[HNOI2012]排队 组合数

    [BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...

  6. BZOJ 2733: [HNOI2012]永无乡 启发式合并treap

    2733: [HNOI2012]永无乡 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  7. bzoj 2734: [HNOI2012]集合选数 状压DP

    2734: [HNOI2012]集合选数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 560  Solved: 321[Submit][Status ...

  8. bzoj 2733: [HNOI2012]永无乡 离线+主席树

    2733: [HNOI2012]永无乡 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1167  Solved: 607[Submit][Status ...

  9. BZOJ 2733: [HNOI2012]永无乡(treap + 启发式合并 + 并查集)

    不难...treap + 启发式合并 + 并查集 搞搞就行了 --------------------------------------------------------------------- ...

随机推荐

  1. FineReport制作可动态展开的组织递归树报表

    先看看效果: 报表软件:FineReport 1.分析-与正常查询的对比 如果不做这种树状结构展开的报表的话,正常的SQL应该是这样写的,以单据表为例,假设单据的机构为分公司,经营部 select 分 ...

  2. UIView的layoutSubviews和drawRect方法何时调用

    首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSubvi ...

  3. 织梦dedecms漏洞修复大全(5.7起)

    很多人说dedecms不好,因为用的人多了,找漏洞的人也多了,那么如果我们能修复的话,这些都不是问题. 好,我们来一个一个修复.修复方法都是下载目录下该文件,然后替换或添加部分代码,保存后上传覆盖(记 ...

  4. Python学习笔记5-闭合与生成器

    >>> import re >>> re.search('[abc]','mark') <_sre.SRE_Match object; span=(1, 2) ...

  5. Windows 10不能拨L2TP协议的VPN

    之前是Windows 10版本1607版本14393.102升级14393.187过后,突然出现不能拨公司防火墙的L2TPVPN了. 网上众说纷纭,原来遇到这个问题的人真不少,不过我是第一次遇到.结合 ...

  6. 安装 log.io 实时监控 php_error 日志

    Log.io 实时监控 php_error.log 日志 开启 php_error 实时监控日志的第一步,要首先开启 php_error 的功能. vi php.ini 修改 PHP 配置文件,将 ; ...

  7. CentOS安装Apache-2.4.10+安全配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Nginx之前,请确保已经使用yum安装了各基础组件,并且配置了www用户和用户组,具体见<CentOS ...

  8. redis字符串

    字符串类型是redis的基本类型 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:COMMAND KEY_NAME SET 和GET用于设置和读取key的值 1.SET key ...

  9. webpack入门——webpack的安装与使用

    一.简介 1.什么是webpack webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都作为模块来使用和处理. ...

  10. [LeetCode] Russian Doll Envelopes 俄罗斯娃娃信封

    You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...