[BZOJ 2111][ZJOI2010]Perm 排列计数(Lucas定理)
Description
称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很大,只能输出模P以后的值
Solution
可以先发现这个排列其实是一个小根堆
F[i]=C(siz[i]-1,siz[i<<1])*F[i<<1]*F[i<<1|1]
组合数的部分可以用Lucas解决
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #define MAXN 1000005 using namespace std; typedef long long LL; int n,P,siz[MAXN],f[MAXN]; LL inv[MAXN],fac[MAXN]; void init() {fac[0]=1,inv[1]=1;for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%P;for(int i=2;i<=n;i++)inv[i]=inv[P%i]*(P-P/i)%P;inv[0]=1;for(int i=1;i<=n;i++)inv[i]=inv[i-1]*inv[i]%P; } void dfs(int x) {siz[x]=1;if((x<<1)<=n)dfs(x<<1),siz[x]+=siz[x<<1];if((x<<1|1)<=n)dfs(x<<1|1),siz[x]+=siz[x<<1|1]; } LL C(LL x,LL y) {if(x<y)return 0;if(x<P&&y<P)return ((fac[x]*inv[y])%P*inv[x-y])%P;return C(x%P,y%P)*C(x/P,y/P); } int solve(int x) {if((x<<1)>n||(x<<1|1)>n)return 1;return ((C(siz[x]-1,siz[x<<1])*solve(x<<1))%P*solve(x<<1|1))%P; } int main() {scanf("%d%d",&n,&P);init(),dfs(1);printf("%d\n",solve(1));return 0; }
转载于:https://www.cnblogs.com/Zars19/p/7002034.html
[BZOJ 2111][ZJOI2010]Perm 排列计数(Lucas定理)相关推荐
- BZOJ 2111 [ZJOI2010]Perm 排列计数:Tree dp + Lucas定理
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2111 题意: 给定n,p,问你有多少个1到n的排列P,对于任意整数i∈[2,n]满足P[i ...
- 【bzoj2111】[ZJOI2010]Perm 排列计数 dp+Lucas定理
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Mogic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Mogic的,答案可能很 ...
- 「题解」:[组合数学]:Perm 排列计数
题干: Description称一个1,2,-,N的排列P1,P2-,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,-N的排列中有多少是Magic的,答 ...
- bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 3528 Solved: 1553 [Submit ...
- BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]
1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 2194 Solved: 919 [Submit][Statu ...
- 2017.10.10 Perm 排列计数 失败总结
ISA:这是最简单的计数问题了,没有比这更简单的了.. Orz 首先每个数只和他/2的数有关,所以可以建出一棵树 建完树剩下的就是分配问题了,,但如果要确定每个点分配哪些数的话是需要记录每个数的,于 ...
- BZOJ 1833 ZJOI2010 count 数字计数 数位DP
题目大意:求[a,b]间全部的整数中0~9每一个数字出现了几次 令f[i]为i位数(算前导零)中每一个数出现的次数(一定是同样的,所以仅仅记录一个即可了) 有f[i]=f[i-1]*10+10^(i- ...
- BZOJ 1833: [ZJOI2010]count 数字计数
1833 思路:数位dp 代码: #include<bits/stdc++.h> using namespace std; #define fi first #define se seco ...
- 基本计数、排列组合与Lucas定理
基本计数原理 加法原理与分类计数法 要完成一件任务,可以经过n种相互无重叠的方案,若第i种方案的方法数为ai,那么完成这件任务的总方案数为 a 1 + a 2 + a 3 + . . . + a n ...
最新文章
- 全网最简单的网络图画法,小白福音包学包会
- PNAS:大脑一思考,就不再对称也不再平衡
- userinits.exe, wupcltr.exe的分析及解决办法
- java多线程实现归并排序_利用多线程对数组进行归并排序
- python一键安装包_Python一键安装全部依赖包
- 第18次csp认证 201912-2 回收站选址(C++)
- c语言数据结构kmp中next计算,数据结构——关于KMP算法中next函数的详细解析
- FTP服务器常规操作
- Think in Java第四版 读书笔记1
- OpenShift / RHEL / DevSecOps 汇总目录
- AngularJS track by $index引起的思考
- 矩池云上安装 NVCaffe教程
- Python字典依据value排序
- LVS+KeepAlived,RabbitMQ高可用负载均衡
- mysql 面试知识点笔记(三)联合索引的最左匹配原则
- Rbf神经网络使用Tensorflow实现
- JAVA ftps设置_如何使用apache.commons.net.ftps配置客户端身份验证?
- CG CTF RE Py交易
- 熊猫压缩怎么使用_您应该可以使用熊猫库做的几件事
- Mac 升级Python 有python2.7到python3.9
热门文章
- 转 13种最为荒谬的编程语言(Bugku 加密)
- iOS9使用提示框的正确实现方式(UIAlertView is deprecated)
- nginx+tomcat+memcached
- Kafka: Producer (0.10.0.0)
- 如何激活Microsoft Office 2010?
- android intent sender,Android7.0以上调PendingIntent.getIntent()报错
- 推荐系统基础之介绍入门篇
- 大家沉迷短视频无法自拔?Python爬虫进阶,带你玩转短视频
- 一阶差分单位根检验_计量经济学第11讲(时间序列计量经济学模型:平稳性及其检验)...
- c#期末考试知识点_c#期末考试复习题及答案