B. Perm 排列计数

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
 

题目描述

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

输入格式

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

输出格式

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

样例

样例输入

20 23

样例输出

16

数据范围与提示

100%的数据中,1 ≤ ??? N ≤ 106, P??? ≤ 10^9,p是一个质数。 数据有所加强

题解

  刚拿到这道题的时候没什么思路,但脑子啊有时候吧~~

  可以把这个题想象成一棵二叉树,下标即在排列中的位置,当然1为根

  一个点的任意一个子孙一直除2的话最终都会到该点,即在以该点为根的子树内,该点值最小  

  假设有n个点,父亲要最小的那一个,左右儿子各自成家,互不干扰,左儿子要剩下的n-1个中的m个,剩下的都给了右儿子一家,组合数为C(n-1,m),向下一个个分下去你会发现

  转移式为 f[爹]=f[左儿子]*f[右儿子]*C(size[],size[])  f[]表示满足条件的组合数,size[]表示以该点为根的树的大小  

  因为n有点大,n!会炸掉,所以求组合数的时候上Lucas定理就欧了

  弱弱的Lockey死活不用Lucas(我牛逼,我伟大),一直在搞高精乘低精,高精除低精,但还是在强悍的Lucas面前献上了膝盖%%%%

  

#include<iostream>
#include<cstdio>
using namespace std;
int n,p,son[],d[];
long long ans=;
long long pow(long long a,long long b,long long p){
long long ans=;
a%=p;
while(b){
if(b&) ans=(ans*a)%p;
b>>=;
a=(a%p)*(a%p)%p;
}
ans%=p;
return ans;
}
long long inv(long long x,long long p){
return pow(x,p-,p);
}
long long C(long long n,long long m){
if(m>n) return ;
long long up=,down=;
for(int i=n-m+;i<=n;i++) up=up*i%p;
for(int i=;i<=m;i++) down=down*i%p;
return up*inv(down,p)%p;
}
long long Lucas(long long n,long long m,long long p){
if(m==) return ;
return C(n%p,m%p)*Lucas(n/p,m/p,p);
}
void dfs(int x){
if(*x<=n) dfs(*x);
if(*x+<=n) dfs(*x+);
son[x]=son[*x]+son[*x+]+;
if(son[x]>){
ans=(long long)(ans%p)*(long long)(Lucas(son[x]-,son[*x]?son[*x]:son[*x+],p)%p)%p;
}
return;
}
int main(){
scanf("%d%d",&n,&p);
if(n==){
cout<<%p;
return ;
}
dfs();
cout<<ans%p;
}

Perm排列计数(新博客试水,写的不好,各路大神见谅)的更多相关文章

  1. 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  2. 关于新世界的大门(新博客地址:BBBob.cf)

    更新:BBBob.cf 这个域名已经不用了(但是依旧可以访问),永久域名改为了BBBob.win 新博客地址为BBBob.cf,以后的博客都会在新博客更新,当然在新博客上我也会写得更用心些,不再像这里 ...

  3. [译]:Orchard入门——给网站添加新博客

    原文链接:Adding a Blog to Your Site 文章内容基于Orchard 1.8版本 Orchard提供一个博客引擎--这让添加一个新博客到你网站变得非常容易. 本文将介绍怎样添加一 ...

  4. 我的新博客:www.wangyufeng.org

    新博客:www.wangyufeng.org 博客园的博客不更新啦.

  5. imfong.com,我的新博客地址

    imfong.com新博客采用jekyll+Github搭建,欢迎访问.

  6. 新博客,新开始-从Chrome浏览器奔溃说起

    新博客,新开始 今天是2015-04-09,昨天新开的博客,今天在这写上一段,算是立个标记,好留以后拿来回溯吧. 不知道是谁跟我说的,坚持写博客是个好习惯,也能帮助自己总结经验,提高技术.也许大概可能 ...

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

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

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

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

  9. 这里已不再更新,访问新博客请移步 http://www.douruixin.com

    这里已不再更新,访问新博客请移步 http://www.douruixin.com

随机推荐

  1. WPF扩展标记X:STATIC

    原文:WPF扩展标记X:STATIC public class XStaic     {         public static string Content = "确定"; ...

  2. 八荣八耻 IT版

    八荣八耻 IT版以可配置为荣,以硬编码为耻:以系统互备为荣,以系统单点为耻:以随时可重启为荣,以不能迁移为耻:以整体交付为荣,以部分交付为耻:以无状态为荣,以有状态为耻:以标准化为荣,以特殊化为耻:以 ...

  3. 15 款 jQuery 社交分享插件

    过去几年中社交媒体越来越流行了,能够分享音乐.视频.图像甚至是其他的 docs 文档到互联网上去,这样子还能够提高页面的点击量.通常,一些社交媒体插件都能允许你的用户分享你网站上的内容到其他的社交平台 ...

  4. Hadoop 3、Hadoop 分布式存储系统 HDFS(好多彩色图)

    HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统. 一.HDFS的优缺点 1.HDFS优点: a.高容错性 .数据保存多个副本 .数 ...

  5. Vista之前的版本,默认本地登陆用户都以管理员权限启动程序

    Vista之前的版本,默认本地登陆用户都以管理员权限启动程序,之后的OS版本默认都没有管理员权限,需要用户提权才能做某些操作,否则需要管理员权限的操作都会失败MSSQL是用户名账号连接,Socket方 ...

  6. Layui 是一款采用自身模块规范编写的国产前端UI框架(5600个Star)

    采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写形式,极低门槛,拿来即用. http://www.layui.com Layui 是一款采用自身模块规范编写的国产前端UI框架, ...

  7. nice-validator表单验证插件的简单使用

    前言 前端表单校验是过滤无效数据.假数据.有毒数据的第一步,是数据安全的第一道关卡,虽然我们不能100%相信客户端提交的数据(真正的校验还得在服务端进行),但设置前端表单校验也是至关重要的,自己写逻辑 ...

  8. 使用fastjson读取超巨json文件引起的GC问题

    项目中需要将巨量数据生成的json文件解析,并写入数据库,使用了 alibaba 的 fastjson,在实践过程中遇到了 GC 问题,记录如下: 数据大约为70万条,文件大小在3~4G左右,使用 f ...

  9. Nodejs操作MySQL - 增删改查

    先安装npm模块项目 npm init 安装mysql npm install mysql --save Nodejs 连接msyql // 导入mysql const mysql = require ...

  10. 【转】php7对redis的扩展及redis主从搭建

    一:redis安装     1:下载并安装 cd /home/software wget http://download.redis.io/releases/redis-3.2.3.tar.gz ta ...