首页 > 其他分享 >[ZJOI2010]排列计数

[ZJOI2010]排列计数

时间:2022-12-14 20:44:29浏览次数:59  
标签:sz 排列 计数 invfac 1000001 ZJOI2010 dp

$[ZJOI2010]$排列计数 链接:https://www.luogu.com.cn/problem/P2606 题面:求满足$p_{i}>p_{i/2}(∀i∈[2,n])$的排列个数。 题解:考虑将限制转化成一棵树,如果我们将$i$向$i/2$连边,这道题目变成了树上排列计数的裸题。转化为了一个树后,限制便变为了儿子的权值大于父亲,令$dp_{i}$表示$i$的子树的排列个数,转移时需要用多重集的排列数合并,则 $dp_{i}=(sz_{x}-1)!\times\dfrac{1}{\prod_{t∈son(i)}^{}sz_{t}!}\prod_{t∈son(i)}^{}dp_{t}$ ``` #include #include using namespace std; long long sz[1000001],n,m,dp[1000001],fac[1000001],invfac[1000001]; void dfs(int x) { sz[x]=1; dp[x]=1; if (x*2<=n) { dfs(x*2); dp[x]=dp[x]*dp[x*2]%m; dp[x]=dp[x]*invfac[sz[x*2]]%m; sz[x]+=sz[x*2]; } if (x*2+1<=n) { dfs(x*2+1); dp[x]=dp[x]*dp[x*2+1]%m; dp[x]=dp[x]*invfac[sz[x*2+1]]%m; sz[x]+=sz[x*2+1]; } dp[x]=dp[x]*fac[sz[x]-1]%m; return; } long long fast_pow(long long a,int b) { if (b==0) return 1; if (b&1) return fast_pow(a*a%m,b/2)*a%m; else return fast_pow(a*a%m,b/2); } int main() { cin>>n>>m; fac[0]=1; for (int i=1;i<=n;++i) fac[i]=fac[i-1]*i%m; invfac[n]=fast_pow(fac[n],m-2); for (int i=n-1;i>=0;--i) invfac[i]=invfac[i+1]*(i+1)%m; dfs(1); cout<

标签:sz,排列,计数,invfac,1000001,ZJOI2010,dp
From: https://www.cnblogs.com/zhouhuanyi/p/16983475.html

相关文章

  • matlab 6.5 设计数字滤波器
    1、用脉冲响应不变法设计一个Butterworth低通数字滤波器,通带截止频率为0.4π  ,通带波纹Rp小于3dB,阻带边界频率为0.6π,阻带衰减大于15dB,采样频率Fs=10000Hz。假设一个信号......
  • 计数+分治求海量数据中重复最多的一个
    海量数据中求取出现次数最多的一个:计数法:(一).思想:(1)假设一天之内某个IP访问百度的次数不超过40亿次,则访问次数可以用unsigned表示.用数组统计出每个IP地址出现的次数,即......
  • 力扣-31-下一个排列
    很明显,对于一个排列而言,最后一个位置是动不了的那么就从倒数第二个位置开始用递归一点点分析错了几次之后终于自己写出来了(叉腰骄傲)voidnextPermutation(vector<int>&......
  • 剑指offer84:包含重复元素集合的全排列
    题目:给定一个可包含重复数字的整数集合nums,按任意顺序返回它所有不重复的全排列。1.输入:nums=[1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]2.输入:nums=[1,2,3]输出......
  • 教你用JavaScript实现实时字符计数器
    案例介绍欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个实时字符计数器。用户在指定位置打字,程序实时显示字符数量。......
  • 剑指offer面试题38. 字符串的排列(回溯)
    ​​面试题38.字符串的排列​​难度中等48输入一个字符串,打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。 示例:输入:s=......
  • 拼多多 2020校招 多多的排列函数(找规律 构造)
    数列{An} 为N的一种排列。例如N=3,可能的排列共6种:123456​​1,2,3​​​​1,3,2​​​​2,1,3​​​​2,3,1​​​​3,1,2​​​​3,2,1​​定义函数F: 其中......
  • Python各个列表交叉进行排列组合
    示例v_list=[["1.mp4","2.mp4"],["3.mp4"],["6.mp4","7.mp4"],[],[]]我想把这个列表里面的各个列表,重新排列组合但是我不知道列表里套了几个列表,套的列表里有......
  • [数学记录]P1232 树的计数
    题意:给出一棵树的dfs序和bfs序,求所有可能的原树的高度平均值\(n\leq2\cdot10^5\)首先把bfs序变成\(1\ton\),这样就需要把原树上的节点分成若干层。设\(......
  • excel科学计数法转换成文本完整显示
    1、首先打开含有科学计数法显示的excel;2、在excel最上面的菜单栏点击数据,找到“分列”选项;3、点击“分列“选项,进入分列向导,采用默认选项;4、点击下一步,还是采用默认选项......