题目描述

称一个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是一个质数。 数据有所加强

刚刚学了组合数学,然后就水了道题。

模板一定要好好学,一个取模颓老半天。。。。。

然后开始说正经的

首先这题仔细想想可以看成二叉堆(满足大小关系嘛。。。)

然后就可以像个树规似的

从最下的节点看是向上转移

设f数组表示方案数size数组表示子树大小

因为每个节点的左子树的方案树与右子树方案数相乘并没有枚举出全部结果

仔细想想每个节点的左右子树的数是可以互换的这样依旧满足二叉堆性质

即 C(size[i]-1,size[left])可表示

然后数据范围可以用卢卡斯定理取模

这就不解释了反正网上很多。。。。

C(n,m)%p=C(n%p,m%p)*C(n/p,m/p)%p

总之最后转移的式子

f[x]=f[x*2]*f[x*2+1]*C(size[x]-1,size[x*2])

蒟蒻第一次写博客如有不当请指正

 1 #include<cstdio>
2 #include<iostream>
3 #include<cmath>
4 #include<algorithm>
5 #include<cstring>
6 #define MAXN 2006001
7 #define ll long long
8 using namespace std;
9 ll sum[MAXN];
10 ll size[MAXN],f[MAXN];
11 ll n,p;
12 ll pow(ll x,ll y)
13 {
14 ll ans=1;
15 while(y>0)
16 {
17 if(y&1)ans=ans*x%p;
18 x=x*x%p;
19 y>>=1;
20 }
21 return ans%p;
22 }
23 ll getsum(ll x,ll y)
24 {
25 if(y>x) return 0;
26 if(!y)return 1;
27 return (sum[x]*pow(sum[y]*sum[x-y]%p,p-2)%p)%p;
28 }
29 ll lucas(ll x,ll y)
30 {
31 if(y>x)return 0;
32 if(y==0)return 1;
33 if(x>p||y>p)return lucas(x/p,y/p)*getsum(x%p,y%p)%p;
34 return getsum(x,y)%p;
35 }
36 void find(ll k)
37 {
38 if(k>n){f[k]=1;return ;}
39 find(k*2);find(k*2+1);
40 size[k]=size[k*2]+size[k*2+1]+1;
41 f[k]=f[k*2]*f[k*2+1]%p*lucas(size[k]-1,size[k*2])%p;
42 }
43 int main()
44 {
45 scanf("%lld%lld",&n,&p);
46 sum[0]=1;sum[1]=1;
47 for(ll i=2;i<=n;++i)sum[i]=((sum[i-1]*1ll*i)%p);
48 find(1);
49 printf("%lld\n",f[1]%p);
50 }

View Code

Perm 排列计数的更多相关文章

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

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

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

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

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

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

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

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

  5. Perm排列计数(新博客试水,写的不好,各路大神见谅)

    B. Perm 排列计数 内存限制:512 MiB 时间限制:1000 ms 标准输入输出   题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i&l ...

  6. 【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是素数 ...

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

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2111 题意:一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2< ...

  8. bzoj2111 Perm 排列计数

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

  9. [ZJOI 2010]Perm 排列计数

    Description 题库链接 询问有多少个 \(1\sim N\) 的排列 \(P\) 满足" \(\forall i\in[2,N], P_i>P_{\frac{i}{2}}\) ...

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

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

随机推荐

  1. 【转】docker打包python应用

    转自https://www.cnblogs.com/shenh/p/9518343.html 一.前言 容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全 ...

  2. QFNU-ACM 2019.5.23组队赛 2019山东省赛复现

    A.Calandar 题意:一年12个月,一个月30天,5天一周,已知某天的年月日星期数,求所给年月日的星期数是多少 思路:直接进行计算,其实每个月每年都是等长度的就使得计算的时候忽略年月,可以直接进 ...

  3. spring总结归纳

    愿历尽千帆,归来仍是少年 简介 spring: 1.是分层的full-stack(全栈)轻量级开源框架.2. 内核:IOC和AOP.3.提供web层springMvc和业务层事务管理,整合众多的开源框 ...

  4. 深入源码,深度解析Java 线程池的实现原理

    java 系统的运行归根到底是程序的运行,程序的运行归根到底是代码的执行,代码的执行归根到底是虚拟机的执行,虚拟机的执行其实就是操作系统的线程在执行,并且会占用一定的系统资源,如CPU.内存.磁盘.网 ...

  5. [bug] Navicat 连 虚拟机MySQL

    参考 https://www.cnblogs.com/brankoliu/p/10845491.html https://blog.csdn.net/qq_40087740/article/detai ...

  6. [DB] mysql windows 安装

    参考 mysql安装 https://www.cnblogs.com/zhangkanghui/p/9613844.html navicat for mysql 中文破解版(无需激活码) https: ...

  7. [DB] 关系型数据库

    名词 数据库(database):保存有组织的数据的容器,是通过DBMS创建的容器 表(table):某种特定类型数据的结构化清单 元组(tuple):行,一条数据库记录,对应一个事物 属性(prop ...

  8. 通用PE u盘装Ghost Win7系统教程

    通用PE u盘装Ghost Win7系统教程 导读 通用pe工具箱是现在最老牌的的U盘装系统和维护电脑的专用工具之一,一键式制作.操作简单便捷,几乎100%支持所有U盘,不再为装机烦恼们,抓紧时间下载 ...

  9. 二进制部署K8S-1基本概念

    二进制部署K8S-1基本概念 感谢老男孩教育王导的公开视频,文档整理自https://www.yuque.com/duduniao/k8s. 1.实验环境 1.1 虚拟机 因为在后期运行容器需要有大量 ...

  10. SSM整合(ForestBlog为例)

    SSM整合(ForestBlog为例) 原版本github地址 :https://github.com/saysky/ForestBlog 文中版本地址:https://github.com/Yans ...