Description

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

Input

只有一行且为用空格隔开的两个非负整数 n 和 m,其含义如上所述。
 
对于 30%的数据 n≤100,m≤100
 
对于 100%的数据 n≤2000,m≤2000

Output

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

题解:不难的一道组合题

分类讨论一下:
(1) 老师由男生隔开
$A(n,n)\times A(n+1,2)\times A(n+3,m)$
(2) 老师由女生隔开
将两个老师中间夹一个女生视为一个整体
$A(n,n)\times A(n+1,1)\times A(n+2,m-1)$
最后累加一下即可 
#include<bits/stdc++.h>
#define maxn 10003
#define ll long long
#define p 10000000000ll
using namespace std;
ll base[maxn];
int n,m,len=1;
void multiply(int x)
{
ll pre=0,tmp;
for(int i=1;i<=len;i++)
{
tmp=base[i]*x;
base[i]=tmp%p+pre;
pre=tmp/p;
}
if(pre)++len, base[len]=pre;
}
int main(){
scanf("%d%d",&n,&m);
base[1]=1;
for(int i=1;i<=n;i++)multiply(i);
for(int i=n-m+4;i<=n+2;i++)multiply(i);
multiply(n+1);
multiply(n*(n+3)+2*m);
printf("%lld",base[len]);
while(--len)printf("%010lld",base[len]);
return 0;
}

  

最新文章

  1. [Data Structure] Bit-map空间压缩和快速排序去重
  2. Solr Python API : SolrCloudpy 与 Pysolr 的 对比
  3. centos 7.0安装花生壳
  4. OpenCV成长之路(10):视频的处理
  5. gcc【数学几何】
  6. C语言初学者代码中的常见错误与瑕疵(13)
  7. SQL Server 2012 批量重建索引
  8. Windbg CLR基础小测 《第六篇》
  9. Power of Four
  10. 【翻译】Sencha Touch2.4 The Layout System 布局
  11. 自动化测试平台CATP
  12. Python学习笔记——基础篇【第二周】——解释器、字符串、列表、字典、主文件判断、对象
  13. JAVAEE——SSH项目实战02:客户列表和BaseDao封装
  14. erlang 删除老版本 安装新版本
  15. [sharepoint]Rest api相关知识(转)
  16. spring jdbc连接数据库
  17. 43、ThreadPool 、WaitHandle、原子操作InterLocked
  18. 接口测试Jmeter+Fiddler组合
  19. centos使用boost过程
  20. Android Studio 2.3.2 下载 - 百度网盘

热门文章

  1. 使用@Value注解对bean进行属性注入
  2. Delphi XE2 之 FireMonkey 入门(24) - 数据绑定: TBindingsList: TBindExpression.Direction
  3. prometheus linux系统告警规则 实例
  4. failed to create process ,pip报错问题
  5. 好的计数思想-LightOj 1213 - Fantasy of a Summation
  6. tips for using shortcuts
  7. JavaSE编码试题强化练习4
  8. Airbnb开源 快速搭建企业级BI数据平台
  9. String.indexOf()的使用方法
  10. BZOJ1185[HNOI2007] 最小矩形覆盖(旋转卡壳)