是我想复杂了

首先发现大于关系构成了一棵二叉树的结构,于是树形dp

设f[i]为i点的方案数,si[i]为i点的子树大小,递推式是\( f[i]=f[i*2]*f[i*2+1]*C_{si[i]-1}^{si[i*2]} \)

组合数用Lucas求

#include<iostream>
#include<cstdio>
using namespace std;
long long n,p,f[5000005],jc[5000005],s[5000005];
long long ksm(long long a,long long b)
{
long long r=1;
while(b)
{
if(b&1)
r=r*a%p;
a=a*a%p;
b>>=1;
}
return r;
}
long long C(long long x,long long y)
{
if(y>x)
return 0;
return jc[x]*ksm(jc[y]*jc[x-y]%p,p-2)%p;
}
long long luc(long long x,long long y)
{
if(!y)
return 1;
return C(x%p,y%p)*luc(x/p,y/p)%p;
}
void dfs(long long u)
{
s[u]=1;f[u]=1;f[u<<1]=1;f[u<<1|1]=1;
if((u<<1)<=n)
dfs(u<<1),s[u]+=s[u<<1];
if((u<<1|1)<=n)
dfs(u<<1|1),s[u]+=s[u<<1|1];
f[u]=f[u<<1]*f[u<<1|1]%p*luc(s[u]-1,s[u<<1])%p;
}
int main()
{
scanf("%lld%lld",&n,&p);
jc[0]=jc[1]=1;
for(long long i=2;i<=n;i++)
jc[i]=jc[i-1]*i%p;
dfs(1);
printf("%lld",f[1]);
return 0;
}

bzoj 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】的更多相关文章

  1. bzoj 2111 [ZJOI2010]Perm 排列计数(DP+lucas定理)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2111 [题意] 给定n,问1..n的排列中有多少个可以构成小根堆. [思路] 设f[i ...

  2. bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)

    bzoj 2111: [ZJOI2010]Perm 排列计数 1 ≤ N ≤ 10^6, P≤ 10^9 题意:求1~N的排列有多少种小根堆 1: #include<cstdio> 2: ...

  3. BZOJ 2111: [ZJOI2010]Perm 排列计数 [Lucas定理]

    2111: [ZJOI2010]Perm 排列计数 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1936  Solved: 477[Submit][ ...

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

  5. bzoj 2111: [ZJOI2010]Perm 排列计数 Lucas

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

  6. bzoj 2111: [ZJOI2010]Perm 排列计数

    神题... 扒自某神犇题解: http://blog.csdn.net/aarongzk/article/details/50655471 #include<bits/stdc++.h> ...

  7. 2111: [ZJOI2010]Perm 排列计数

    2111: [ZJOI2010]Perm 排列计数 链接 题意: 称一个1,2,...,N的排列$P_1,P_2...,P_n$是Magic的,当且仅当$2<=i<=N$时,$P_i> ...

  8. 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas

    [题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...

  9. 【BZOJ2111】[ZJOI2010]Perm 排列计数 组合数

    [BZOJ2111][ZJOI2010]Perm 排列计数 Description 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi> ...

随机推荐

  1. 用Google Analytics UTM标注社会化媒体分享流量来源

    随着社会化媒体营销概念近两年的日益盛行,敢于吃螃蟹的营销工作者们展开了一些尝试,发现对社会化营销效果进行综合评估是一大难点,价值难以衡量.主要原因在于它的营销效果中混杂了直接的目标转化.品牌宣传.品牌 ...

  2. HDU 6397 组合数学+容斥 母函数

    Character Encoding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Oth ...

  3. Java操作XML牛逼利器JDOM&DOM4J

    JDOM  JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,用于快速开发 XML 应用 程序. JDOM 官方网站:http://www.jdom.org/ 利 ...

  4. try catch finally执行顺序 (return / 变量覆盖)

    finally有return 始终返回finally中的return 抛弃 try 与catch中的return 情况1:try{} catch(){}finally{} return x; try{ ...

  5. JAVA实验--统计文章中单词的个数并排序

    分析: 1)要统计单词的个数,就自己的对文章中单词出现的判断的理解来说是:当出现一个非字母的字符的时候,对前面的一部分字符串归结为单词 2)对于最后要判断字母出现的个数这个问题,我认为应该是要用到ma ...

  6. 用WCF服务来动态的获取本地XML省市区文档

    建立一个WCF服务. using ClassLibrary; using System; using System.Collections.Generic; using System.Linq; us ...

  7. 共享内存mmap学习 及与 shmxxx操作的区别

    上一篇学习了共享内存: http://www.cnblogs.com/charlesblc/p/6142139.html 根据这个 http://blog.chinaunix.net/uid-2633 ...

  8. sklearn特征工程总结

    转自: http://www.cnblogs.com/jasonfreak/p/5448385.html https://www.zhihu.com/question/28641663/answer/ ...

  9. webpack-Dependency Graph(依赖图)

    依赖图(Dependency Graph) 任何时候,一个文件依赖于另一个文件,webpack 就把此视为文件之间有依赖关系. 这使得 webpack 可以接收非代码资源(non-code asset ...

  10. 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)

    各位看官们,大家好,上一回中咱们说的是显示变量和函数地址的样例,这一回咱们说的样例是:内置宏.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在编译程序的时候,假设有语法错误,编译器就 ...