博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ZJOI2010]排列计数
阅读量:5159 次
发布时间:2019-06-13

本文共 1563 字,大约阅读时间需要 5 分钟。

题目描述

称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很大,只能输出模P以后的值

输入输出格式

输入格式:

输入文件的第一行包含两个整数 n和p,含义如上所述。

输出格式:

输出文件中仅包含一个整数,表示计算1,2,⋯, ���的排列中, Magic排列的个数模 p的值。

输入输出样例

输入样例#1:

20 23

输出样例#1:

16

说明

100%的数据中,1 ≤N ≤ 10^6, P≤ 10^9,p是一个质数。

题解

题目就是让你求出有多少种排列满足小根堆

由于每个点的限制条件构成了一颗二叉树

所以我们可以设f[i]表示以值i为根的小根堆的数目

那么显然ta的子树内的所有取值都要比他大

所以我们可以统计出它及它的子树有多少大Num[i]

这样\(f[i] =C(Num[i],Num[ls])*f[ls]*f[rs]\)就可以转移了

因为到i时有Num[i]个值待选

那么分配Num[ls]个值给左子树的方案数乘上f[ls]和f[rs]就是f[i]了

#include
#include
#include
#include
const int M = 1000005 ;using namespace std ;int n , mod ;int f[M] , fac[M] , Num[M] ;inline int fpw(int Base , int k) { int temp = 1 ; while(k) { if(k & 1) temp = (1LL * temp * Base) % mod ; Base = (1LL * Base * Base) % mod ; k >>= 1 ; } return temp ;}inline int C(int n , int m) { return (1LL * fac[n] % mod * fpw((1LL * fac[m] * fac[n - m]) % mod , mod - 2) % mod) % mod ;}int main() { cin >> n >> mod ; fac[0] = 1LL ; for(int i = 1 ; i <= n ; i ++) fac[i] = (1LL * fac[i - 1] * i) % mod ; for(int i = n ; i >= 1 ; i --) { Num[i] = 1 ; if(i * 2 <= n) Num[i] += Num[i << 1] ; if(i * 2 + 1 <= n) Num[i] += Num[i << 1 | 1] ; if(i * 2 + 1 <= n) f[i] = (1LL * C(Num[i] - 1 , Num[i << 1]) * f[i << 1] % mod * f[i << 1 | 1]) % mod ; else if(i * 2 <= n) f[i] = f[i << 1] ; else f[i] = 1 ; } cout << f[1] << endl ; return 0 ;}

转载于:https://www.cnblogs.com/beretty/p/9885923.html

你可能感兴趣的文章
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
跟着辛星用PHP的反射机制来实现插件
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>
jQuery 显示加载更多
查看>>
代理模式
查看>>
Confluence 6 系统运行信息中的 JVM 内存使用情况
查看>>
Confluence 6 升级以后
查看>>
用JS实现版面拖拽效果
查看>>
二丶CSS
查看>>
《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
查看>>
Hibernate主键生成策略
查看>>
Crushing Machinery - Strong Support of Cement Enterprise
查看>>
AsyncTask
查看>>
Django框架(十九)—— drf:序列化组件(serializer)
查看>>
JS一些概念知识及参考链接
查看>>
关于JS中&&和||用法技巧
查看>>