[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=;
- 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=;
- for(int i=;i<=num[];i++)
- {
- int tmp=num[i]*x+k;
- num[i]=tmp%;
- k=tmp/;
- }
- while(k)num[++num[]]=k%,k/=;
- }
- void sum(int a1[],int a2[],int res[])
- {
- int j=,x=;
- while(j<=a1[]||j<=a2[])
- {
- res[j]=a1[j]+a2[j]+x;
- x=res[j]/;
- res[j]%=;
- j++;
- }
- res[j]=x;
- if(!res[j])j--;
- res[]=j;
- }
- void print(int a[])
- {
- for(int i=a[];i;i--)printf("%d",a[i]);
- puts(" ");
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- //turn(n,num1);turn(m,num2);
- num1[]=num1[]=;
- for(int i=;i<=n;i++)mult(i,num1);
- for(int i=n+;i>=n;i--)mult(i,num1);
- for(int i=n+;i>=n-m+;i--)mult(i,num1);
- num2[]=num2[]=;
- mult(n+,num2);
- mult(m,num2);
- mult(,num2);
- for(int i=n+;i>=n+-(m-)+;i--)mult(i,num2);
- for(int i=;i<=n;i++)mult(i,num2);
- //print(num1);print(num2);
- sum(num1,num2,tot);
- print(tot);
- return ;
- }
[bzoj2729][HNOI2012]排队 题解 (排列组合 高精)的更多相关文章
- BZOJ2729 [HNOI2012]排队 【高精 + 组合数学】
题目链接 BZOJ2729 题解 高考数学题... 我们先把老师看做男生,女生插空站 如果两个老师相邻,我们把他们看做一个男生,女生插空站 对于\(n\)个男生\(m\)个女生的方案数: \[n!m! ...
- [BZOJ2729]:[HNOI2012]排队(组合数学)
题目传送门 题目描述 某中学有n名男同学,m名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) ...
- Luogu P2624 [HNOI2008]明明的烦恼 Prufer+组合+高精
好的我把标准版过了... 设$ r_i$为$i$的度数 首先,我们设 $ sum = \Sigma r_i-1$,$ tot $ 为所有能够确定度数的点 所以我们有 $ C ^ {sum} _{n-2 ...
- BZOJ2729 HNOI2012排队(组合数学+高精度)
组合入门题.高精度入门题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...
- BZOJ2729:[HNOI2012]排队(组合数学)
Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...
- bzoj2729 [HNOI2012]排队
组合数学,推一下式子,并不难推. java代码 import java.io.*; import java.math.BigInteger; import java.util.*; public cl ...
- luoguP1080 国王游戏 题解(NOIP2012)(贪心+高精)
luoguP1080 国王游戏 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include& ...
- [题解](排列组合)luogu_P3223排队
把老师和女生插到男生中间,先对男生排列:A(n,n),然后把老师插到n+1个空里:A(n+1,2),然后放入女生:A(n+3,m) 但是少考虑了老师之间由1个女生分开的情况,所以把三个人看作一个整体, ...
- BZOJ.1005.[HNOI2008]明明的烦恼(Prufer 高精 排列组合)
题目链接 若点数确定那么ans = (n-2)!/[(d1-1)!(d2-1)!...(dn-1)!] 现在把那些不确定的点一起考虑(假设有m个),它们在Prufer序列中总出现数就是left=n-2 ...
随机推荐
- 用 GetEnvironmentVariable 获取常用系统环境变量
以前曾用 GetWindowsDirectory.GetSystemDirectory.GetTempPath 等函数获取系统常用文件夹; 也用过 SHGetSpecialFolderLocation ...
- 树状数组,Fenwick Tree
Fenwick Tree, (also known as Binary Indexed Tree,二叉索引树), is a high-performance data structure to cal ...
- 微信公众号的SpringBoot+Quartz的定时任务Demo
SpringBoot整合quartz并不难,难在普通类实现了Job接口后等于实例化交给quartz,不受Spring管理,则service层等等其他依赖的注入将无法注入,这也是难点之一. 解决方法: ...
- idea 配置tomcat
[Toc] #一.配置全局tomcat (类似eclipse中配置tomcat的路径) ##1.1 看图,打开Edit Configuratioms... ##1.2 展开Defaults,找到tom ...
- js中文首字母数组排序
js中文首字母数组排序 数组的排序js算法: var Pinyin = (function() { var Pinyin = function(ops) { this.initialize(ops); ...
- 97、PageRank算法学习
最近由于.......你懂得,需要一些搜索方面的知识,于是乎我重新复习了一下上半年读的那本书<数学之美>Dr吴军老师写的. 感觉读完这种书还是写一下比较好,因为将来说不定就会忘记了. 接下 ...
- 点读系列《Jenkins用户文档》
Jenkins用户手册官网地址:点击打开 开源 CI&CD 软件 自动化各种任务, build test deploy 支持各种运行方式 Jenkins入门 入门指南 需要java和docke ...
- 字母所对应的Unicode编码
A~Z 65~90 a~z 97~122 public class Unicode { public static void main(S ...
- 封装tab切换事件
HTML <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- 【Neo4j查询优化系列】如何快速统计节点的关系数
在图数据库中我们经常需要统计节点上的关系数目.一种常见的查询写法是这样的: MATCH (n:Person {name:'Keanu Reeves'})-[]-() RETURN count(*); ...