组合数学起步-排队[HNOI2012][BZOJ2729]
<题面>
这个题十分基础
写这个博客给自己看的呵呵
遇到这个题,一看就是组合数学,
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]的更多相关文章
- 组合数学起步-排列计数[ZJOI2010][BZOJ2111]
<题面> 数据范围:$1 \leq N \leq 10^6, P \leq 10^9 $ 这个题…… 以为是排列,其实是组合 题目中说是从所有排列中找到Magic的,就是 $p_{i/2} ...
- 【bzoj2729】[HNOI2012]排队 组合数学+高精度
题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入 ...
- [BZOJ2729]:[HNOI2012]排队(组合数学)
题目传送门 题目描述 某中学有n名男同学,m名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) ...
- BZOJ2729:[HNOI2012]排队(组合数学)
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】
题目链接 BZOJ2729 题解 高考数学题... 我们先把老师看做男生,女生插空站 如果两个老师相邻,我们把他们看做一个男生,女生插空站 对于\(n\)个男生\(m\)个女生的方案数: \[n!m! ...
- 【BZOJ2729】【HNOI2012】排队(组合数学)
不想弄题面了... 题解 做这道题目我真的好蠢... 好容易的数学题目 很明显自己写高精度吧...(不解释了) 剩下的如何计算. 要有两类情况 ①老师之间有男生 那么,这种情况下,直接插空就行了 先把 ...
- BZOJ2729 HNOI2012排队(组合数学+高精度)
组合入门题.高精度入门题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...
- 【BZOJ2729】[HNOI2012]排队 组合数
[BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...
- bzoj2729 [HNOI2012]排队
组合数学,推一下式子,并不难推. java代码 import java.io.*; import java.math.BigInteger; import java.util.*; public cl ...
随机推荐
- 如何快速合并多个TXT文本内容
工作中有时候需要合并很多文本内容,例如一些推送清单之类,一个一个打开去复制粘贴的话,少量还行,如果txt文本数据量大(10+M以上)且文件数量多(成百上千),这种方式就显得很低效了.具体要求如下: ...
- 3.pycharm spark配置
pycharm 内的环境变量配置 选择相应的spark程序文件的对应的配置信息 PYSPARK_PYTHON:python的安装路径 PYTHONPATH:spark安 ...
- sql中on的连接条件与where的区别
left join [表名] on [条件] where [条件] --on表示连接条件 --where表示对结果的过滤条件 两者不尽相同,使用时需注意 例如: select * from tabl ...
- STL vector容器需要警惕的一些坑
从迭代器中取值切记需要判断是否为空 例如: vector<int> vtTest; vtTest.clear(); if (vtTest.empty()){ ; } ]; 如果没有忘了判断 ...
- Python-数据分析模块
目录 numpy 模块 matplotlib 模块 pandas 模块 numpy 模块 numpy 模块主要用来做数据分析,对numpy数组 进行科学运算 主要方法和常用属性,都是用numpy 生成 ...
- 2-sat——hdu3062
对于怎么建边还是不太清楚 选了a,那么b c不选,所以连边 选了b或c,那么a必定不选 /* 每个点拆成i*2,i*2+1 队长选,那么队友不选 队长不选,那么队友必定要选 */ #include&l ...
- duilib教程之duilib入门简明教程4.响应按钮事件
上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = new CButtonUI; 也就是说,其实那整块绿色背景区域都是按钮的区域.(这里简要介绍下,CC ...
- hdu 4563
hdu 4563 把每个命令走的距离抽象成完全背包 枚举最后一个不是整点走完的命令 #include <iostream> #include <algorithm> #incl ...
- 杂项-公司:Oracle
ylbtech-杂项-公司:Oracle 甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩.1989年正式进入中国市场.201 ...
- 关于socket的setsockopt的使用
关于setsockopt的使用 学习python的时候学习到了socket,其中有个setsockopt方法的使用,于是乎整理一下关于这个方法的一些内容. 本节目录 一 功能描述 二 用法(getso ...