26524中位数第二人生_计数原理与排列组合是选修几

26524中位数第二人生_计数原理与排列组合是选修几洛谷P2606 [ZJOI2010]排列计数(组合数 dp)

大家好,又见面了,我是你们的朋友全栈君。

题意

题目链接

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

Sol

这辈子做不出的计数系列。

一眼小根堆没啥好说的。最关键的一点是:树的形态是可以递推出来的。

那么当前点$i$为根节点,大小为$siz[i]$,左/右儿子分别为$ls, rs$

那么$f[i] = C_{siz[i] – 1}^{siz[ls]} f[ls] \times f[rs]$

Lucas定理算组合数

#include<cstdio>
//#define int long long 
using namespace std;
const int MAXN = 1e6 + 10;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {
   
   if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N, P, fac[MAXN] = {
   
   1}, ifac[MAXN], siz[MAXN], f[MAXN];
int fastpow(int a, int p, int mod) {
    int base = 1;
    while(p) {
        if(p & 1) base = (1ll * base % mod * a % mod) % mod;
        a = (1ll * a % mod * a % mod) % mod; p >>= 1;
    }
    return base % mod;
}
int C(int N, int M, int P) {
    if(M > N) return 0;
    return 1ll * fac[N] % P * ifac[M] % P * ifac[N - M] % P;
}
int Lucas(int N, int M, int P) {
    if(!N || !M) return 1;
    return Lucas(N / P, M / P, P) * C(N % P, M % P, P);    
}
main() {
    N = read(); P = read();
    for(int i = 1; i <= N; i++) fac[i] = 1ll * i * fac[i - 1] % P;
    ifac[N] = fastpow(fac[N], P - 2, P);
    for(int i = N; i >= 1; i--) ifac[i - 1] = 1ll * i * ifac[i] % P;
    for(int i = N; i >= 1; i--) {
        siz[i] = 1;
        int ls = (i << 1), rs = (i << 1 | 1);
        if(rs <= N) siz[i] += siz[ls] + siz[rs], f[i] = 1ll * Lucas(siz[i] - 1, siz[ls], P) * f[ls] % P * f[rs] % P;    
        else if(ls <= N) siz[i] += siz[ls], f[i] = f[ls];
        else f[i] = 1;
    }
    printf("%d", f[1]);
    return 0;
}
/*
999999 1000000007
*/

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107306.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一阶惯性环节matlab编程_matlab一阶惯性环节

    一阶惯性环节matlab编程_matlab一阶惯性环节该楼层疑似违规已被系统折叠隐藏此楼查看此楼我照着网上的程序自己改出来的程序是这样的clc;clear;ts=0.001;%采样时间sys=tf(-53,[19926,100],’ioDelay’,540);%tf是传递函数,用来实现G(s);在自动控制领域经常用到,dsys=c2d(sys,ts,’z’);%把控制函数离散化,转化…

    2022年10月4日
    0
  • Latex数学公式表[通俗易懂]

    Latex数学公式表[通俗易懂]Latex的两种公式模式:行间(inline)模式:即在正文中插入数学内容。行间公式用$…$独立(display)模式:独立成行,可以有或没有编号。无编号用\[…\]

    2022年6月15日
    27
  • ipad越狱有什么坏处吗?_平板越狱有什么好处

    ipad越狱有什么坏处吗?_平板越狱有什么好处1. iPad越狱是什么?iPad越狱有什么好处和坏处?不越狱又有啥缺点?越狱就是解除一些原版固件的限制。最大的好处是可以安装激活成功教程的软件和游戏,这些软件和游戏本来都是收费的。而且,有些功能很强大的软件,并不是花钱能在官方的App Store里能买到的(某些有米之人或许会说“我就不越狱,我都花钱买正版”,我只能客气地说他只知其一不知其二),比如SBSettings, OpenSSH, Lockd

    2022年9月2日
    2
  • sendfile函数–零拷贝

    sendfile函数–零拷贝零拷贝:零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除通信数据在存储器之间不必要的中间拷贝过程,有效地提高通信效率,是设计高速接口通道、实现高速服务器和路由器的关键技术之一。sendfile#includessize_tsendfile(intout_fd,intin_fd,off_t*offset,size_tcount);参数特别注意

    2022年5月24日
    59
  • Masonry 源码解读(下)

    Masonry 源码解读(下)

    2021年5月27日
    115
  • pandas小记:pandas索引和选择

    pandas小记:pandas索引和选择http://blog.csdn.net/pipisorry/article/details/18012125检索/选择索引选择时建议全部使用loc(尤其是修改df原本数据时),原因是最下面说的视图和显示拷贝。dataframe列选择和Series一样,在DataFrame中的一列可以通过字典记法或属性来检索,返回Series:frame2[0]#选择第0列,最新版的好像…

    2022年7月22日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号