排列组合题(本文A(n,m)表示从n个元素里选m个的排列数)。

首先,老师和女生有不能相邻的限制条件,应该用插空法。而且老师人数较少且固定,把老师和男生进行混合,对女生用插空。

我先来一手错误做法,n个男生先全排列A(n,n),两个老师插空A(n+1,2),m个女生插空A(n+3,m),乘到一起。ans=A(n,n)*A(n+1,2)*A(n+3,m)。试一下1,1;差了4。为什么呢?因为我们这种考虑方式忽略了只用一个女生将老师隔开的情况。

那这样就好说了,还是混合加插空,把老师和男生混在一起。

首先让两个老师站在一起2*A(n+1,n+1),然后让任意一个女生将其隔开2*m*A(n+1,n+1)。此时这个整合体与男生共有n+2个空,插入剩下的m-1个女生,总共2*m*A(n+1,n+1)*A(n+2,m-1)。

接着让两个老师不站在一起,有两种计算方式:

(1)老师和男生一共A(n+2,n+2)中排列方式,减去上面的站在一起的方式,总共A(n+2,n+2)-2*A(n+1,n+1)。

(2)男生全排列A(n,n),老师插n+1个空,总共A(n,n)*A(n+1,2)。

上述两种方法得到的结果用排列恒等式是很容易证明相等的,自己想一想。插个图片,想看的可以看看。

剩下的女生插空A(n+3,m),总共A(n+3,m)*A(n,n)*A(n+1,2)。

两种情况加在一起就是答案。

这题高精没跑了,但是为了少打高精组件,尝试化简,可以用一用上面证明图中的内容。再来张图:

得到结论((n+3)*n+2*m)*A(n+1,n+1)*A(n+2,m-1)。这东西就完全可以高精乘低精搞定了(其实只是少了个高精加……)。

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
int a[]={,},len=;
void mult(int x){
int res=;
for(int i=;i<=len;i++){
a[i]=a[i]*x+res;
res=a[i]/;
a[i]%=;
}while(res){
a[++len]=res%;
res/=;
}
}
void print(){
for(int i=len;i>=;i--)
printf("%d",a[i]);
return ;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n+;i++)
mult(i);
for(int i=n+;i>=n-m+;i--)
mult(i);
mult(n*n+*n+*m);
print();
return ;
}

HNOI2012排队的更多相关文章

  1. bzoj 2729: [HNOI2012]排队

    2729: [HNOI2012]排队 Time Limit: 10 Sec Memory Limit: 128 MB Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体 ...

  2. 2729: [HNOI2012]排队

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

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

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

  4. 2729:[HNOI2012]排队 - BZOJ

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

  5. [HNOI2012]排队

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

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

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

  7. P3223 [HNOI2012]排队

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

  8. 洛谷 P3223 [HNOI2012]排队

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

  9. Luogu P3223 [HNOI2012]排队 组合

    本来做了一道  P4901 排队 后来发现自己做错题了...到也都是数学qwq 这题最恶心的就是两只(雾)老师. 那我们分类讨论: 1.两个老师之间是男生: $ A(n,n)*A(n+1,2)*A(n ...

  10. 【bzoj2729】[HNOI2012]排队 组合数学+高精度

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

随机推荐

  1. 服务端相关知识学习(四)之Zookeeper启动过程

    在上一篇,我们了解了zookeeper最基本的配置,也从中了解一些配置的作用,那么这篇文章中,我们将介绍Zookeeper的启动过程,我们在了解启动过程的时候还要回过头看看上一篇中各个配置参数在启动时 ...

  2. Laravel 实现指定用户下的设备分页(与查询指定分类下的文章原理相同)

    <?php //控制器 namespace App\Http\Controllers\Api\User; use App\Http\Controllers\Controller; use Ill ...

  3. 11 Django实现WebSocket

    因为需要实时显示状态的需求,想到了websocket,但是Django原生不支持websocket,后来搜索到了chango-channels项目,可以实现次需求. 一.Channels 官方文档 二 ...

  4. 【异常】Could not find artifact com.wm.****:

    1 详细异常 [ERROR] Failed to execute goal on project spark-etl: Could not resolve dependencies for proje ...

  5. S19格式

    S-record格式文件是Freescale CodeWarrior编译器生成的后缀名为.S19的程序文件,是一段直接烧写进MCU的ASCII码,英文全称问Motorola format for EE ...

  6. zabbix4.2Proxy安装文档

    zabbix4.2Proxy安装文档 目录 zabbix4.2Proxy安装文档    1 一.安装    2 1.前期安装准备    2 2.安装zabbix RPM源    3 2.1下载zabb ...

  7. python异常:常见异常、处理、断言、自定义异常

    一.异常是什么 二.常见异常 三.异常处理 四.不太常用语法 五.主动判处异常 六.断言 七.使用场景 八.自定义异常类型 一.异常是什么 """ 什么是异常? 异常是错 ...

  8. 使用函数rand5()来实现函数rand7()

    题目: 给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样.现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数. 思路: 很多人的第一 ...

  9. PAT Basic 1023 组个最小数 (20 分)

    给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就 ...

  10. 查看电脑物理地址(MAC)方法

    首先打开电脑,按ctrl+R键,将会出现以下界面 然后直接点击确认即可,会出现管理员界面,如下 我们现在有两种查看MAC地址的方法: 方法一:.直接输入ipconfig/all(或者输入ipconfi ...