<题面>

这个题十分基础

写这个博客给自己看的呵呵

遇到这个题,一看就是组合数学,

so,开始推公式,

刚开始想的是,先排男生,再排女生,最后排老师

推了一会,呃呃呃,情况复杂,考虑的好像有点多。//蒟蒻心态

然后换了一个思路,

先排男生,再排老师,最后排女生

想了下,就决定用减法。


先把老师和男生混好,然后把女生插空

这样就会有一种非法情况,老师相连,而且只有一种

这样就可以把两个老师绑成一个整体,再按上述操作进行

就会有一个式子:

$A \binom{n+2}{n+2} \times A \binom{m}{n+3} -A \binom{2}{2} \times A \binom{n+1}{n+1} \times A\binom{m}{n+2}$

还是可以懂得吧?

而且只要用高精乘低精和高精减就可以了咯

最后蒻蒻的说:我调这个题主要在高精度上,苦笑

 #include <iostream>
#include <cstring>
#include <cstdio>
#define N 50000
using namespace std;
struct Hyper_long{
int *a;
Hyper_long(int k){
a=new int[k];
for(int i=;i<k;i++)a[i]=;
}
void out(){
if(a[]==)putchar('');
for(int i=a[];i>=;i--)putchar(a[i]+'');
puts("");
}
void set_length(int len){
a[]=len;
}
int length(){
return a[];
}
};
void operator *= (Hyper_long &x,int y){
long long r=;
for(int i=;i<=x.length();i++){
x.a[i]=x.a[i]*y+r;
r=x.a[i]/;
x.a[i]%=;
}
while(r!=){
x.a[]++;
x.a[x.a[]]=r;
r=x.a[x.a[]]/;
x.a[x.a[]]%=;
}
return ;
}
Hyper_long operator - (Hyper_long x,Hyper_long y){
Hyper_long k(N);
int len=max(x.length(),y.length());
for(int i=;i<=len;i++){
k.a[i]=x.a[i]-y.a[i];
if(k.a[i]<){
x.a[i+]--;
k.a[i]+=;
}
}
while(){
if(k.a[len]!= || len==) break;
len--;
}
k.set_length(len);
return k;
}
Hyper_long a(N),b(N),c(N);
int m,n;
int main(){
a.a[]=a.a[]=;
b.a[]=b.a[]=;
scanf("%d%d",&n,&m);
for(int i=;i<=n+;i++){//先把男生和老师混在一起
a*=i;
}
for(int i=n+;i>=n+-m+;i--){//把女生插进去
a*=i;
}
b*=;//把两个老师绑在一起
for(int i=;i<=n+;i++){//和男生混好
b*=i;
}
for(int i=n+;i>=n+-m+;i--){//把女生插进去
b*=i;
}
c=a-b;
c.out();//输出
}

Total Code

补:如果可以进行式子的处理然后合并同类项:

$A \binom{n+1}{n+1} \times A \binom{m-1}{n+3} \times (n-m+4)-2 \times A \binom{n+1}{n+1} \times A \binom{m-1}{n+3} \times (n+2)\\ = A \binom{n+1}{n+1} \times A \binom{m-1}{n+3} \times (n+2) \times (n-m+2) $

就可以实现只用高精乘低精就可以解决的问题了,提出的减法项只用int就可以呢

组合数学起步-排队[HNOI2012][BZOJ2729]的更多相关文章

  1. 组合数学起步-排列计数[ZJOI2010][BZOJ2111]

    <题面> 数据范围:$1 \leq N \leq 10^6, P \leq 10^9 $ 这个题…… 以为是排列,其实是组合 题目中说是从所有排列中找到Magic的,就是 $p_{i/2} ...

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

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

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

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

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

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

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

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

  6. 【BZOJ2729】【HNOI2012】排队(组合数学)

    不想弄题面了... 题解 做这道题目我真的好蠢... 好容易的数学题目 很明显自己写高精度吧...(不解释了) 剩下的如何计算. 要有两类情况 ①老师之间有男生 那么,这种情况下,直接插空就行了 先把 ...

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

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

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

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

  9. bzoj2729 [HNOI2012]排队

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

随机推荐

  1. leetcode-第5周双周赛-1135-最低成本联通所有城市

    方法一: class Solution: def minimumCost(self, N: int, conections: List[List[int]]) -> int: def find( ...

  2. 移动端,fixed bottom问题

    //不显示 .bar { position:fixed; bottom:0; z-index:99; } //显示 .bar{ position:fixed; bottom:calc(90vh); / ...

  3. Docker系列(十):Kubernetes集群入门

    kubenetes安装 官网:https://github.com/kubernetes/kubernetes/blob/release-1.0/docs/getting-started- guide ...

  4. PAT甲级——A1087 All Roads Lead to Rome【30】

    Indeed there are many different tourist routes from our city to Rome. You are supposed to find your ...

  5. 《DSP using MATLAB》Problem 8.14

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  6. linux下安装rabbitmq 集群

    1.下载erlang官网地址 http://www.erlang.org/download 挑选合适的版本 然后 wget 比如目前18.3运行命令 wget http://erlang.org/do ...

  7. https证书加密

    对称加密 浏览器向服务端发送请求时,服务端首先给浏览器发送一个秘钥,浏览器用秘钥对传输的数据进行加密后发送给浏览器,浏览器拿到加密后的数据使用秘钥进行解密 非对称加密 服务端通过rsa算法生成一个公钥 ...

  8. Oracle的UTL_FILE.FOPEN学习笔记

    Oracle提供的文件操作包UTL_FILE包中的UTL_FILE.FOPEN负责打开一个文件. UTL_FILE.FOPEN(location in varchar2, filename in va ...

  9. 记录:vue结合springboot进行分页查询和按条件进行查询

    界面: 主要代码: 搜索框: <el-form ref="searchForm" :inline="true" :model="searchMa ...

  10. 新浪新闻API

    新浪新闻API ustcmio 关注 2017.01.15 20:44* 字数 536 阅读 2479评论 2喜欢 7 新浪新闻的API:1.访问手机新浪网https://sina.cn/?from= ...