[bzoj2729][HNOI2012]排队 题解 (排列组合 高精)
Description
Input
Output
Sample Input
Sample Output
码题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=100005; 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=0;for(int i=1;i<=num[0];i++){int tmp=num[i]*x+k;num[i]=tmp%10;k=tmp/10;}while(k)num[++num[0]]=k%10,k/=10; } void sum(int a1[],int a2[],int res[]) {int j=1,x=0;while(j<=a1[0]||j<=a2[0]){res[j]=a1[j]+a2[j]+x;x=res[j]/10;res[j]%=10;j++;}res[j]=x;if(!res[j])j--;res[0]=j; } void print(int a[]) {for(int i=a[0];i;i--)printf("%d",a[i]);puts(" "); } int main() {scanf("%d%d",&n,&m);//turn(n,num1);turn(m,num2);num1[0]=num1[1]=1;for(int i=1;i<=n;i++)mult(i,num1);for(int i=n+1;i>=n;i--)mult(i,num1);for(int i=n+3;i>=n-m+4;i--)mult(i,num1);num2[0]=num2[1]=1;mult(n+1,num2);mult(m,num2);mult(2,num2);for(int i=n+2;i>=n+2-(m-1)+1;i--)mult(i,num2);for(int i=1;i<=n;i++)mult(i,num2);//print(num1);print(num2); sum(num1,num2,tot);print(tot);return 0; }
View Code
转载于:https://www.cnblogs.com/Rorschach-XR/p/11101993.html
[bzoj2729][HNOI2012]排队 题解 (排列组合 高精)相关推荐
- P3223 [HNOI2012]排队(高中排列组合)
传送门 题意 nnn个男生,mmm个女生,222个老师排队 女生和女生不能相邻,老师和老师不能相邻,问方案数. 考虑到老师只有两个,所以可以对老师来讨论. Ⅰ.\color{Red}Ⅰ.Ⅰ.两只老师间 ...
- BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】
题目链接 BZOJ2729 题解 高考数学题... 我们先把老师看做男生,女生插空站 如果两个老师相邻,我们把他们看做一个男生,女生插空站 对于\(n\)个男生\(m\)个女生的方案数: \[n!m! ...
- bzoj2729: [HNOI2012]排队
高精度+排列组合. 如果计算老师能挨在一起的情况 有 (n+2)! * A(n+3,m) 老师一定挨宰一起的情况 有 2*(n+1)!*A(n+2,m). 相减就是答案. #include<cs ...
- 排队队---排列组合之插空法与捆绑法
input 4 2 9 7 1 9 10 2 8 4 1 7 9 output 34 博主是一个菜鸟,期望各位大佬能进行指点. 读完题目之后,我们不妨来回顾一下高中的排列组合之插空法与捆绑法. 捆绑法 ...
- 【题解】洛谷P1066 [NOIP2006TG] 2^k进制数(复杂高精+组合推导)
洛谷P1066:https://www.luogu.org/problemnew/show/P1066 思路 挺难的一道题 也很复杂 满足题目要求的种数是两类组合数之和 r的最多位数m为 w/k(当w ...
- BZOJ.1005.[HNOI2008]明明的烦恼(Prufer 高精 排列组合)
题目链接 若点数确定那么ans = (n-2)!/[(d1-1)!(d2-1)!...(dn-1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n-2 ...
- 数论三之排列组合Ⅱ——Virus Tree 2,RGB Coloring,123 Triangle,排列计数,排队,卡农
丝且人一口 Virus Tree 2 description solution code RGB Coloring description solution code 123 Triangle des ...
- 【题解】P1080 国王游戏(贪心+高精python天下第一)
P1080 国王游戏 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排 ...
- E 排队(排列组合)[牛客小*白月赛61]
题面如下: 思路 or 题解: 对于一个长度为 nnn 的 排列组合 如果存在一对 逆序对 (x,y)(x, y)(x,y) xxx 在 yyy 的前面有 n∗(n−1)2\frac{n * (n - ...
最新文章
- 这个B站up主太硬核了!纯手工打造AI小电视:硬件自己焊接,驱动代码全手写...
- 37、iamgeview 图层叠加
- BigData:根据最新2018人工智能行业创新企业Top100名单,绘制AI地区热点图,一目了然,看清哪个是AI最热门城市,以及VC最AI的热门领域
- 第二届「星斗奖」获奖名单正式公布
- Nginx的server_name匹配执行顺序
- 《MS SQL Server 2000管理员手册》系列——8. 管理 Microsoft SQL Server 服务
- aix oracle监听配置_AIX系统中安装ORACLE,客户端连接时,监听会宕掉的问题
- LDAP命令介绍---dsreplication--initialize
- android 调出键盘表情_如何在Android的G板键盘中搜索表情符号和GIF | MOS86
- php内置常量显示行数,php学习记录-系统内置常量(constant)
- gc:C语言的垃圾回收库-英文
- 性能测试之JMeter中ForEach控制器详解
- 大数据之-Hadoop3.x_MapReduce_MapTask工作机制---大数据之hadoop3.x工作笔记0124
- Windows之远程访问×××的简单部署
- 中望3d快捷键命令大全_cad快捷键命令大全
- 设置广告类型的html小窗口,网页两边悬浮窗广告代码
- c语言中圆的周长公式,圆的周长公式
- 异性相处,关系再好,也要懂得这些“分寸”
- java34-计算机的发展-计算机硬件-计算机软件-计算机存储规则-计算机的基本操作-CMD-环境变量
- python应用——分治法实现循环赛