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=;
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=;
for(int i=;i<=num[];i++)
{
int tmp=num[i]*x+k;
num[i]=tmp%;
k=tmp/;
}
while(k)num[++num[]]=k%,k/=;
}
void sum(int a1[],int a2[],int res[])
{
int j=,x=;
while(j<=a1[]||j<=a2[])
{
res[j]=a1[j]+a2[j]+x;
x=res[j]/;
res[j]%=;
j++;
}
res[j]=x;
if(!res[j])j--;
res[]=j;
}
void print(int a[])
{
for(int i=a[];i;i--)printf("%d",a[i]);
puts(" ");
}
int main()
{
scanf("%d%d",&n,&m);
//turn(n,num1);turn(m,num2);
num1[]=num1[]=;
for(int i=;i<=n;i++)mult(i,num1);
for(int i=n+;i>=n;i--)mult(i,num1);
for(int i=n+;i>=n-m+;i--)mult(i,num1);
num2[]=num2[]=;
mult(n+,num2);
mult(m,num2);
mult(,num2);
for(int i=n+;i>=n+-(m-)+;i--)mult(i,num2);
for(int i=;i<=n;i++)mult(i,num2);
//print(num1);print(num2);
sum(num1,num2,tot);
print(tot);
return ;
}

[bzoj2729][HNOI2012]排队 题解 (排列组合 高精)的更多相关文章

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

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

  2. [BZOJ2729]:[HNOI2012]排队(组合数学)

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

  3. Luogu P2624 [HNOI2008]明明的烦恼 Prufer+组合+高精

    好的我把标准版过了... 设$ r_i$为$i$的度数 首先,我们设 $ sum = \Sigma r_i-1$,$ tot $ 为所有能够确定度数的点 所以我们有 $ C ^ {sum} _{n-2 ...

  4. BZOJ2729 HNOI2012排队(组合数学+高精度)

    组合入门题.高精度入门题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...

  5. BZOJ2729:[HNOI2012]排队(组合数学)

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

  6. bzoj2729 [HNOI2012]排队

    组合数学,推一下式子,并不难推. java代码 import java.io.*; import java.math.BigInteger; import java.util.*; public cl ...

  7. luoguP1080 国王游戏 题解(NOIP2012)(贪心+高精)

    luoguP1080 国王游戏 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include& ...

  8. [题解](排列组合)luogu_P3223排队

    把老师和女生插到男生中间,先对男生排列:A(n,n),然后把老师插到n+1个空里:A(n+1,2),然后放入女生:A(n+3,m) 但是少考虑了老师之间由1个女生分开的情况,所以把三个人看作一个整体, ...

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

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

随机推荐

  1. php开发面试题---lavarel和tp的区别是什么(呕心整理)

    php开发面试题---lavarel和tp的区别是什么(呕心整理) 一.总结 一句话总结: 反思的回顾非常有用,因为决定了我的方向和技巧 以战养己,这是非常非常好的方式 主要从大小.功能.安全性.操作 ...

  2. vue绑值(表格)

    vue绑值(表格) <!DOCTYPE html> <html lang="zh-CN"> <head> <title>JSON取数 ...

  3. SQLSERVER 时间日期函数,查询今天日期、昨天、一个星期、半年前的数据

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0昨天的所有数据:select * from 表名 where D ...

  4. 抓包工具tcpdump用法说明--1

    本文目录: 1.1 tcpdump选项 1.2 tcpdump表达式 1.3 tcpdump示例 tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项 ...

  5. 数据库(二)—— MySQL索引优化

    目录 MySQL的索引优化 一.MySQL 5.7的初始化配置 二.MySQL配置文件 1.配置 2.配置文件作用 三.多实例 1.创建相关的目录 2.创建实例的配置文件 3.初始化 4.授权 5.启 ...

  6. 02、python的基础-->占位符、while...else...、逻辑运算符

    1.%s.%d格式化输出程序(%占位符,s字符串,d数字) name = input('请输入姓名:') age = input('请输入年龄:') job = input('请输入工作:') hob ...

  7. vue自定义指令clickoutside实现点击其他元素才会触发

    clickoutside.js // 代码内容 const clickoutsideContext = '@@clickoutsideContext'; export default { bind(e ...

  8. 一个完整实用的axios封装

    1.先引入 import axios from 'axios' import qs from 'qs'import router from '../router'; import store from ...

  9. psql 命令

    (1)使用命令行连接数据库 psql -U postgres -h localhost -p 5433 (2)列出所有的数据库 \l -- 查看所有数据库 (3)进入某个数据库 \c name -- ...

  10. css3新增(圆角边框(border-radius),盒子阴影(box-shadow),文字阴影(text-shadow),背景缩放(background-size))

    1.圆角边框  border-radius border-radius 属性用于设置元素的外边框圆角 语法:border-radius:length; 参数值可以是数值 或者 百分比 的形式 正方形, ...