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

码题5分钟,推导两小时

对于“不能相邻”,考虑采用插空法

首先对于无限制的男生有$A_n^n$种排列

这时产生了n+1个空档,插入2个老师还要$*A_{n+1}^2$

现在有n+3个空档,放m个女生有$A_{n+3}^m$种

此时的所有情况都满足条件

但只考虑了男生隔开老师的情况

而女生也可以隔开老师

考虑捆绑play(雾)法

让两个老师一个女生卡在一起(卢老爷我错辽)

这种组合放入男生队伍中有$n+1$种位置

选着一个女生有m种

放剩下的$A_{n+2}^{m-1}$

老师排列方式$A_2^2=2$

男生排列方式$A_n^n$

$ANS=A_n^n*A_{n+1}^2*A_{n+3}^m+(n+1)*2*A_n^n*m*A_{n+2}^{m-1}$

连高精乘低精都不会打了真是耻辱

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=100005;
int n,m,num1[N],num2[N],tot[N];
/*int intlen(int x)
{return (int)log10(x)+1;
}
void turn(int x,int num[])
{int l=0;while(x){int now=x%10;num[++l]=now;x/=10;}num[0]=l;//reverse(num+1,num+l+1);
}*/
void mult(int x,int num[])
{int k=0;for(int i=1;i<=num[0];i++){int tmp=num[i]*x+k;num[i]=tmp%10;k=tmp/10;}while(k)num[++num[0]]=k%10,k/=10;
}
void sum(int a1[],int a2[],int res[])
{int j=1,x=0;while(j<=a1[0]||j<=a2[0]){res[j]=a1[j]+a2[j]+x;x=res[j]/10;res[j]%=10;j++;}res[j]=x;if(!res[j])j--;res[0]=j;
}
void print(int a[])
{for(int i=a[0];i;i--)printf("%d",a[i]);puts(" ");
}
int main()
{scanf("%d%d",&n,&m);//turn(n,num1);turn(m,num2);num1[0]=num1[1]=1;for(int i=1;i<=n;i++)mult(i,num1);for(int i=n+1;i>=n;i--)mult(i,num1);for(int i=n+3;i>=n-m+4;i--)mult(i,num1);num2[0]=num2[1]=1;mult(n+1,num2);mult(m,num2);mult(2,num2);for(int i=n+2;i>=n+2-(m-1)+1;i--)mult(i,num2);for(int i=1;i<=n;i++)mult(i,num2);//print(num1);print(num2);
    sum(num1,num2,tot);print(tot);return 0;
}

View Code

转载于:https://www.cnblogs.com/Rorschach-XR/p/11101993.html

[bzoj2729][HNOI2012]排队 题解 (排列组合 高精)相关推荐

  1. P3223 [HNOI2012]排队(高中排列组合)

    传送门 题意 nnn个男生,mmm个女生,222个老师排队 女生和女生不能相邻,老师和老师不能相邻,问方案数. 考虑到老师只有两个,所以可以对老师来讨论. Ⅰ.\color{Red}Ⅰ.Ⅰ.两只老师间 ...

  2. BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】

    题目链接 BZOJ2729 题解 高考数学题... 我们先把老师看做男生,女生插空站 如果两个老师相邻,我们把他们看做一个男生,女生插空站 对于\(n\)个男生\(m\)个女生的方案数: \[n!m! ...

  3. bzoj2729: [HNOI2012]排队

    高精度+排列组合. 如果计算老师能挨在一起的情况 有 (n+2)! * A(n+3,m) 老师一定挨宰一起的情况 有 2*(n+1)!*A(n+2,m). 相减就是答案. #include<cs ...

  4. 排队队---排列组合之插空法与捆绑法

    input 4 2 9 7 1 9 10 2 8 4 1 7 9 output 34 博主是一个菜鸟,期望各位大佬能进行指点. 读完题目之后,我们不妨来回顾一下高中的排列组合之插空法与捆绑法. 捆绑法 ...

  5. 【题解】洛谷P1066 [NOIP2006TG] 2^k进制数(复杂高精+组合推导)

    洛谷P1066:https://www.luogu.org/problemnew/show/P1066 思路 挺难的一道题 也很复杂 满足题目要求的种数是两类组合数之和 r的最多位数m为 w/k(当w ...

  6. BZOJ.1005.[HNOI2008]明明的烦恼(Prufer 高精 排列组合)

    题目链接 若点数确定那么ans = (n-2)!/[(d1-1)!(d2-1)!...(dn-1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n-2 ...

  7. 数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农

    丝且人一口 Virus Tree 2 description solution code RGB Coloring description solution code 123 Triangle des ...

  8. 【题解】P1080 国王游戏(贪心+高精python天下第一)

    P1080 国王游戏 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排 ...

  9. E 排队(排列组合)[牛客小*白月赛61]

    题面如下: 思路 or 题解: 对于一个长度为 nnn 的 排列组合 如果存在一对 逆序对 (x,y)(x, y)(x,y) xxx 在 yyy 的前面有 n∗(n−1)2\frac{n * (n - ...

最新文章

  1. 这个B站up主太硬核了!纯手工打造AI小电视:硬件自己焊接,驱动代码全手写...
  2. 37、iamgeview 图层叠加
  3. BigData:根据最新2018人工智能行业创新企业Top100名单,绘制AI地区热点图,一目了然,看清哪个是AI最热门城市,以及VC最AI的热门领域
  4. 第二届「星斗奖」获奖名单正式公布
  5. Nginx的server_name匹配执行顺序
  6. 《MS SQL Server 2000管理员手册》系列——8. 管理 Microsoft SQL Server 服务
  7. aix oracle监听配置_AIX系统中安装ORACLE,客户端连接时,监听会宕掉的问题
  8. LDAP命令介绍---dsreplication--initialize
  9. android 调出键盘表情_如何在Android的G板键盘中搜索表情符号和GIF | MOS86
  10. php内置常量显示行数,php学习记录-系统内置常量(constant)
  11. gc:C语言的垃圾回收库-英文
  12. 性能测试之JMeter中ForEach控制器详解
  13. 大数据之-Hadoop3.x_MapReduce_MapTask工作机制---大数据之hadoop3.x工作笔记0124
  14. Windows之远程访问×××的简单部署
  15. 中望3d快捷键命令大全_cad快捷键命令大全
  16. 设置广告类型的html小窗口,网页两边悬浮窗广告代码
  17. c语言中圆的周长公式,圆的周长公式
  18. 异性相处,关系再好,也要懂得这些“分寸”
  19. java34-计算机的发展-计算机硬件-计算机软件-计算机存储规则-计算机的基本操作-CMD-环境变量
  20. python应用——分治法实现循环赛

热门文章

  1. RISC-V,芯片中的网红战斗机,究竟是个什么鬼
  2. Matlab坐标图像隐藏横纵坐标的方法
  3. CSharp中的数组和ArrayList及List
  4. 用户细分_基于购买历史的用户细分
  5. 大批工厂提前20天放假,而大家却都在玩金融
  6. 为什么你总办不到大额信用卡?
  7. MFC中绘制高亮的图标 VC图标填充半透明色
  8. mysql5.5更改端口后初始化_centos7 修改mysql5.7默认端口后启动异常
  9. linux用光盘作yum源实验步骤,Linux使用系统光盘作为YUM源
  10. java基础之ConcurrentHashMap