组合数学起步-排队[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 ...
随机推荐
- linux普通用户无法登录mysql
一.前言 本帖方法只适用于普通用户无法登录,但root用户可以登录的情况. 今天将war包放入linux后,运行报错,经过检查发现是数据库连接不上.奇怪的是,用户名和密码都是正确的,所以有了以下发现. ...
- 【颓废篇】人生苦短,我用python(一)
谁渴望来一场华(ang)丽(zang)的python交易! 最近突然产生了系统学习python的想法. 其实自从上次luogu冬日绘板dalao们都在写脚本就有这种想法了. 最近被计算几何势力干翻的我 ...
- Vagrant box ubuntu/xenial64 添加vagrant用户解决没有登录密码的问题
参考了Vagrant box ubuntu/xenial64 の ubuntuユーザ の passwordについて 1. 可以通过 Git Bash 使用 vagrant ssh 登录到Ubuntu ...
- layui实现批量导入excal表
layui实现多文件上传,并直接选中需要上传文件的类型 //拖拽上传 upload.render({ elem : '#import', size: , //限制文件大小,单位 KB accept: ...
- 学习笔记css3
边框 盒子圆角 border-radius:5px / 20%: border-radius:5px 4px 3px 2px; 左上,右上,右下,左下 盒子阴影 box-shadow:box-shad ...
- 单独安装Babel或者Less
1.直接安装Babel法: 1)初始化自动创建package.json npm init 2)首先全局安装Babel. npm install -g babel-cli 3)项目安装Babel. np ...
- pyqt点击右上角关闭界面但是子线程仍在运行
现象: 通过右上角的叉关闭图形界面后,程序运行的子线程却不会被自动关闭,依然留存在系统中原因: 子线程没有正确关闭解决方法: 1.将子线程设置成守护线程 self.your_thread = thre ...
- 19-11-06-&
你&我处于这里……在一起? $$\text{%%%Wearry}$$ ZJ: 一遇到Wearry的思维题就得×得够呛. 考试心态炸裂,码上三个暴力然后就不知道该干啥了. 现在就想敲自己. 不要 ...
- 19-10-30-C
交文件吼啊. ZJ一下: T1是真·高中数学. T2不是很清楚,只得了30. T3打了一个欧拉序. 做的海星的地方: Vim太好用辣,直接按平常打叫上去它就是 freopen T1仔仔细细的研究了高考 ...
- System.Web.Mvc.ModelValidationResult.cs
ylbtech-System.Web.Mvc.ModelValidationResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutr ...