[bzoj2111][ZJOI2010]Perm 排列计数(组合数学)
2017-10-10 10:32
483 查看
题目:
我是超链接题解:
我们可以把这个题抽象为一棵二叉树,同一棵子树上儿子要比父亲权值大那么1的值一定是1
对于一棵子树来说,最小的点一定是根节点,那么填数字的方案只跟子树大小有关
f[i]=C(size[i]-1,ls(i))*f[i*2]*f[i*2+1]
于是我们线性筛处理出阶乘和阶乘的逆元 代入即可得到WA
原因是这题n可以大于p 此时要用到Lucas定理。。。
代码:
#include <cstdio> #include <iostream> #define LL long long using namespace std; const int N=1000000; LL mul[N+5],f[N+5],inv[N+5];int n,mod,size[N*2+5]; void pre() { mul[0]=mul[1]=1; for (int i=2;i<=N;i++) mul[i]=mul[i-1]*i%mod; inv[0]=inv[1]=1; for (int i=2;i<=N;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; for (int i=2;i<=N;i++) inv[i]=inv[i-1]*inv[i]%mod; } LL C(int n,int m) { if (m>n) return 0; return mul *inv[n-m]%mod*inv[m]%mod; } void dfs(int x) { size[x]=1; if (x*2<=n) { dfs(x*2); size[x]+=size[x*2]; } if (x*2+1<=n) { dfs(x*2+1); size[x]+=size[x*2+1]; } } LL Lucas(int n,int m) { if (m>n) return 0; LL ans=1; for (;m;n/=mod,m/=mod) ans=ans*C(n%mod,m%mod)%mod; return ans; } void answer(int x) { f[x]=1;bool f1=0,f2=0; if (x*2<=n) answer(x*2),f1=1; if (x*2+1<=n) answer(x*2+1),f2=1; if (f1&&f2) f[x]=(LL)Lucas(size[x]-1,size[x*2])*f[x*2]%mod*f[x*2+1]%mod; else if (f1) f[x]=(LL)Lucas(size[x]-1,size[x*2])*f[x*2]%mod; } int main() { scanf("%d%d",&n,&mod); pre(); dfs(1); answer(1); printf("%lld",f[1]%mod); }
相关文章推荐
- BZOJ 2111 ZJOI2010 Perm 排列计数 组合数学+Lucas定理
- [BZOJ2111][ZJOI2010]Perm 排列计数(组合数学+lucas定理)
- bzoj 2111: [ZJOI2010]Perm 排列计数 (组合数学+Lucas定理)
- BZOJ 2111: [ZJOI2010]Perm 排列计数(简单组合数学)
- [BZOJ2111][ZJOI2010]Perm排列计数(组合数学)
- BZOJ 2111: [ZJOI2010]Perm 排列计数|组合数学|Lucas定理|DP
- BZOJ 2111 ZJOI2010 Perm 排列计数 组合数学+Lucas定理
- [bzoj2111][ZJOI2010]Perm 排列计数 ——问题转换,建立数学模型
- [数学杂题]BZOJ 2111—— [ZJOI2010]Perm 排列计数
- [BZOJ2111][ZJOI2010]Perm 排列计数 && 数学
- BZOJ 2111 [ZJOI2010]Perm 排列计数
- 【bzoj2111】【zjoi2010】【perm排列计数】【dp+Lucas定理】
- BZOJ 2111: [ZJOI2010]Perm 排列计数(DP+Lucas定理)
- bzoj2111 [ZJOI2010]Perm 排列计数
- 【BZOJ】2111 [ZJOI2010] Perm 排列计数
- bzoj2111 Perm 排列计数 组合数学
- bzoj2111 [ZJOI2010]Perm 排列计数
- BZOJ 2111: [ZJOI2010]Perm 排列计数 DP+lucas定理
- bzoj 2111 [ZJOI2010]Perm 排列计数(DP+lucas定理)
- 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas