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

时间:2022-09-24 22:03:22

bzoj 2111: [ZJOI2010]Perm 排列计数

1 ≤ N ≤ 10^6, P≤ 10^9

题意:求1~N的排列有多少种小根堆

   1: #include<cstdio>

   2: using namespace std;

   3: const int N = 1e6+5;

   4: typedef long long LL;

   5: LL m, p, T, x, y, F[N];

   6: LL n, size[N<<1];

   7: LL f[N];

   8: LL inv(LL t, LL p) {

   9:     return t == 1 ? 1 : (p - p / t) * inv(p % t, p) % p;

  10: }

  11: LL C(LL n, LL m){

  12:     if(n < m) return 0;

  13:     if(n < p && m < p)

  14:         return F[n] * 1ll * inv(F[n-m]%p, p) % p * inv(F[m]%p, p) % p;

  15:     return C(n/p, m/p) * C(n%p, m%p) %p;

  16: }

  17: int main(){

  18:     int i;

  19:     scanf("%d%lld", &n, &p);

  20:     F[0] = 1;

  21:     for(i = 1; i <= n&&i < p; i++) F[i] = F[i-1] * i %p;//阶乘预处理

  22:     for(i = n; i; i--) {

  23:         size[i] = size[i<<1] + size[i<<1|1] + 1;

  24:         f[i] = C(size[i]-1, size[i<<1])*((i<<1)>n?1:f[i<<1])%p*((i<<1|1)>n?1:f[i<<1|1])%p;

  25:     }

  26:     printf("%lld\n", f[1]);

  27: }

bzoj 2111: [ZJOI2010]Perm 排列计数 (dp+卢卡斯定理)的更多相关文章

  1. BZOJ 2111&colon; &lbrack;ZJOI2010&rsqb;Perm 排列计数 &lbrack;Lucas定理&rsqb;

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

  2. 【bzoj2111】&lbrack;ZJOI2010&rsqb;Perm 排列计数 dp&plus;Lucas定理

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

  3. BZOJ 2111 &lbrack;ZJOI2010&rsqb;Perm 排列计数:Tree dp &plus; Lucas定理

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2111 题意: 给定n,p,问你有多少个1到n的排列P,对于任意整数i∈[2,n]满足P[i ...

  4. bzoj 2111 &lbrack;ZJOI2010&rsqb;Perm 排列计数(DP&plus;lucas定理)

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

  5. bzoj 2111&colon; &lbrack;ZJOI2010&rsqb;Perm 排列计数【树形dp&plus;lucas】

    是我想复杂了 首先发现大于关系构成了一棵二叉树的结构,于是树形dp 设f[i]为i点的方案数,si[i]为i点的子树大小,递推式是\( f[i]=f[i*2]*f[i*2+1]*C_{si[i]-1} ...

  6. bzoj 2111&colon; &lbrack;ZJOI2010&rsqb;Perm 排列计数 Lucas

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

  7. bzoj 2111&colon; &lbrack;ZJOI2010&rsqb;Perm 排列计数

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

  8. 2111&colon; &lbrack;ZJOI2010&rsqb;Perm 排列计数

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

  9. 【BZOJ】2111&colon; &lbrack;ZJOI2010&rsqb;Perm 排列计数 计数DP&plus;排列组合&plus;lucas

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

随机推荐

  1. android 百度地图 通过剪裁图片添加 Marker

    初始化百度地图: private void initViews() { mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mM ...

  2. cocos2d-x之物理引擎之碰撞监测

    #include "HelloWorldScene.h" USING_NS_CC; #define RED_BIT_MASK    0b0100 #define GREEN_BIT ...

  3. 【转】MYSQL入门学习之十三:自定义函数的基本操作

    转载地址:http://www.2cto.com/database/201212/177382.html 一.自定义函数(UDF)的特性和功能  www.2cto.com           函数能分 ...

  4. 【面试题004】c&sol;c&plus;&plus;字符串,替换空格

      一,c/c++字符串 1.C/C++中每个字符串都以字符’\0‘作为结尾,这样我们就能很方便地找到字符串的最后尾部. 由于这个原因每个字符串都有一个额外的开销,注意字符串越界的问题: 2.C/C+ ...

  5. Visual C&plus;&plus; 打印编程技术-内存设备环境

    1.内存设备环境 内存设备环境是一个没有设备与它联系的环境.一般利用与某个标准设备环境兼容的内存设备环境把一个位图复制到屏幕上去.为此可以先创建一个与某个标准设备环境兼容的内存设备环境,然后把所要显示 ...

  6. C语言课设——电影院选票系统

    C语言课设--电影院选票系统 1.课题介绍 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户 1.电影 ...

  7. Linux Sphinx 安装与使用

    一.什么是 Sphinx? Sphinx 是一个基于SQL的全文检索引擎,可以结合 MySQL,PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序 更容易实现专业化 ...

  8. elasticsearch 外网访问9200端口访问

    可以访问127.0.0.1:9200,但不能访问 公网IP:9200 后面ip就是127.0.0.1的局域网ip,如何解决? 修改配置文件 config/elasticsearch.yml netwo ...

  9. C&plus;&plus; operator关键字详解

    C++中的operator主要有两个作用,一是操作符的重载,一是自定义对象类型的隐式转换. 类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转 ...

  10. Cassandra的数据模型

    Cassandra的数据模型可以理解为嵌套的Map,在Cassandra中数据类型主要有四种:Column,SuperColumn,ColumnFamily,Keyspace.下面分别介绍这几种类型. ...