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定理)相关推荐

  1. 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 ...

  2. 【bzoj2111】[ZJOI2010]Perm 排列计数 dp+Lucas定理

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Mogic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Mogic的,答案可能很 ...

  3. 「题解」:[组合数学]:Perm 排列计数

    题干: Description称一个1,2,-,N的排列P1,P2-,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,-N的排列中有多少是Magic的,答 ...

  4. bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3528  Solved: 1553 [Submit ...

  5. BZOJ 1951: [Sdoi2010]古代猪文 [Lucas定理 中国剩余定理]

    1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2194  Solved: 919 [Submit][Statu ...

  6. 2017.10.10 Perm 排列计数 失败总结

    ISA:这是最简单的计数问题了,没有比这更简单的了..  Orz 首先每个数只和他/2的数有关,所以可以建出一棵树 建完树剩下的就是分配问题了,,但如果要确定每个点分配哪些数的话是需要记录每个数的,于 ...

  7. BZOJ 1833 ZJOI2010 count 数字计数 数位DP

    题目大意:求[a,b]间全部的整数中0~9每一个数字出现了几次 令f[i]为i位数(算前导零)中每一个数出现的次数(一定是同样的,所以仅仅记录一个即可了) 有f[i]=f[i-1]*10+10^(i- ...

  8. BZOJ 1833: [ZJOI2010]count 数字计数

    1833 思路:数位dp 代码: #include<bits/stdc++.h> using namespace std; #define fi first #define se seco ...

  9. 基本计数、排列组合与Lucas定理

    基本计数原理 加法原理与分类计数法 要完成一件任务,可以经过n种相互无重叠的方案,若第i种方案的方法数为ai,那么完成这件任务的总方案数为 a 1 + a 2 + a 3 + . . . + a n ...

最新文章

  1. 全网最简单的网络图画法,小白福音包学包会
  2. PNAS:大脑一思考,就不再对称也不再平衡
  3. userinits.exe, wupcltr.exe的分析及解决办法
  4. java多线程实现归并排序_利用多线程对数组进行归并排序
  5. python一键安装包_Python一键安装全部依赖包
  6. 第18次csp认证 201912-2 回收站选址(C++)
  7. c语言数据结构kmp中next计算,数据结构——关于KMP算法中next函数的详细解析
  8. FTP服务器常规操作
  9. Think in Java第四版 读书笔记1
  10. OpenShift / RHEL / DevSecOps 汇总目录
  11. AngularJS track by $index引起的思考
  12. 矩池云上安装 NVCaffe教程
  13. Python字典依据value排序
  14. LVS+KeepAlived,RabbitMQ高可用负载均衡
  15. mysql 面试知识点笔记(三)联合索引的最左匹配原则
  16. Rbf神经网络使用Tensorflow实现
  17. JAVA ftps设置_如何使用apache.commons.net.ftps配置客户端身份验证?
  18. CG CTF RE Py交易
  19. 熊猫压缩怎么使用_您应该可以使用熊猫库做的几件事
  20. Mac 升级Python 有python2.7到python3.9

热门文章

  1. 转 13种最为荒谬的编程语言(Bugku 加密)
  2. iOS9使用提示框的正确实现方式(UIAlertView is deprecated)
  3. nginx+tomcat+memcached
  4. Kafka: Producer (0.10.0.0)
  5. 如何激活Microsoft Office 2010?
  6. android intent sender,Android7.0以上调PendingIntent.getIntent()报错
  7. 推荐系统基础之介绍入门篇
  8. 大家沉迷短视频无法自拔?Python爬虫进阶,带你玩转短视频
  9. 一阶差分单位根检验_计量经济学第11讲(时间序列计量经济学模型:平稳性及其检验)...
  10. c#期末考试知识点_c#期末考试复习题及答案