bzoj 2111 [ZJOI2010]Perm 排列计数(DP+lucas定理)
【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=2111
【题意】
给定n,问1..n的排列中有多少个可以构成小根堆。
【思路】
设f[i]为i个数的方案,设l为左子树大小r为右子树大小,则有:
f[i]=C(i-1,l)*f[l]*f[r]
因为是个堆,所以子树大小都是确定的,可以直接递推得到。
其中C(n,m) nm比较大,可以用lucas定理求。
模型建立的重要性可知一二。。。
【代码】
#include<cstdio>
#include<iostream>
using namespace std; typedef long long ll;
const int N = 5e6+; int mod,n;
ll f[N],fac[N],s[N]; ll pow(ll a,ll p,int mod)
{
ll ans=;
while(p) {
if(p&) ans=(ans*a)%mod;
a=(a*a)%mod; p>>=;
}
return ans;
} void get_pre(int n)
{
fac[]=;
for(int i=;i<=n;i++)
fac[i]=(fac[i-]*i)%mod;
}
ll C(ll n,ll m,int mod)
{
if(n<m) return ;
if(n<mod&&m<mod) {
ll invn=pow(fac[n-m],mod-,mod);
ll invm=pow(fac[m],mod-,mod);
return fac[n]*invm%mod*invn%mod;
}
return C(n/mod,m/mod,mod)*C(n%mod,m%mod,mod)%mod;
} int main()
{
scanf("%d%d",&n,&mod);
get_pre(min(n,mod));
for(int i=n;i;i--) {
s[i]=s[i<<]+s[i<<|]+;
f[i]=C(s[i]-,s[i<<],mod);
if((i<<)<=n) f[i]=(f[i]*f[i<<])%mod;
if((i<<|)<=n) f[i]=(f[i]*f[i<<|])%mod;
}
printf("%lld\n",f[]);
return ;
}
bzoj 2111 [ZJOI2010]Perm 排列计数(DP+lucas定理)的更多相关文章
- 【bzoj2111】[ZJOI2010]Perm 排列计数 dp+Lucas定理
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Mogic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Mogic的,答案可能很 ...
- bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)
bzoj 2111: [ZJOI2010]Perm 排列计数 1 ≤ N ≤ 10^6, P≤ 10^9 题意:求1~N的排列有多少种小根堆 1: #include<cstdio> 2: ...
- BZOJ 2111: [ZJOI2010]Perm 排列计数 [Lucas定理]
2111: [ZJOI2010]Perm 排列计数 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1936 Solved: 477[Submit][ ...
- 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 ...
- bzoj 2111: [ZJOI2010]Perm 排列计数【树形dp+lucas】
是我想复杂了 首先发现大于关系构成了一棵二叉树的结构,于是树形dp 设f[i]为i点的方案数,si[i]为i点的子树大小,递推式是\( f[i]=f[i*2]*f[i*2+1]*C_{si[i]-1} ...
- bzoj 2111: [ZJOI2010]Perm 排列计数 Lucas
题意:称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很大, ...
- bzoj 2111: [ZJOI2010]Perm 排列计数
神题... 扒自某神犇题解: http://blog.csdn.net/aarongzk/article/details/50655471 #include<bits/stdc++.h> ...
- 2111: [ZJOI2010]Perm 排列计数
2111: [ZJOI2010]Perm 排列计数 链接 题意: 称一个1,2,...,N的排列$P_1,P_2...,P_n$是Magic的,当且仅当$2<=i<=N$时,$P_i> ...
- 【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是素数 ...
随机推荐
- vue 选项卡(转载)
!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-e ...
- beta阶段成果展示博客
跟着我们一一点一点揭开蒙娜丽莎的微笑 - 本次beta阶段之前,我们团队,对其他组在事后诸葛亮期间对我们的评价进行深刻的审视,特别是缺点方面,开了好几次的站立会议,专门讨论beta的主要方向和任务.最 ...
- Beta阶段——4
一.提供当天站立式会议照片一张: 二. 每个人的工作 (有work item 的ID) (1) 昨天已完成的工作: 完善了用户管理模式的功能 (2) 今天计划完成的工作: 对用户功能的添加. (3) ...
- selenium 关键字驱动部分设计思路
1 说明: 1.以下的代码亲测直接可用, 2.设计思路来自博客园的 张飞_ :http://www.cnblogs.com/zhangfei/p/5330994.html / http://w ...
- hdu 1556 Color the ball(树状数组)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意:N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数[a,b]之间的气球 ...
- css中定位功能的特性
它有四大特性,页面找不到盒子的情况 1.z-index值表示谁压着谁,数值大的压盖数值小的 2.只有定位了的元素,才有z-index.也就是说,不管相对定位,绝对定位,固定定位,都可以使用z-inde ...
- Windows系统下搭建Appium自动化测试框架
简介 一种开源的测试框架(http://appium.io/) 能够用来测试原生Android/iOS应用.混合应用以及webapp 通过webdriver协议来操作应用,其核心是一个web服务器,接 ...
- YARN结构分析与工作流程
YARN Architecture Link: http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YARN.html ...
- 02.基于IDEA+Spring+Maven搭建测试项目--详细过程
一.背景介绍 1.1公司相关技术 Git:是一款免费的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,方便多人集成开发 Maven:是基于项目对象模型(POM),可以通过一小段描述信息 ...
- 安装MySql出现Error Nr.1045的解决办法
如图,最后一步出现这个错误框 这是因为上次安装过MySql,其用户数据在卸载的时候没有被删除掉,解决办法如下: 显示隐藏的文件夹,打开C盘,找到下图文件删除之 删除之后再安装一遍MySQL,就可以了