zoukankan      html  css  js  c++  java
  • bzoj 2111: [ZJOI2010]Perm 排列计数

    神题。。。

    扒自某神犇题解:

    http://blog.csdn.net/aarongzk/article/details/50655471

     1 #include<bits/stdc++.h>
     2 #define LL long long
     3 using namespace std;
     4 inline LL ra()
     5 {
     6     LL x=0; char ch=getchar();
     7     while (ch<'0' || ch>'9') ch=getchar();
     8     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
     9     return x;
    10 }
    11 
    12 const int maxn=2000005;
    13 
    14 LL n,mod,f[maxn],size[maxn];
    15 LL fac[maxn],inv[maxn];
    16 
    17 LL C(int n, int m)
    18 {
    19     if (n<m) return 0;
    20     if (n<mod && m<mod) return fac[n]*inv[m]%mod*inv[n-m]%mod;
    21     return C(n/mod,m/mod)*C(n%mod,m%mod);
    22 }
    23 
    24 int main()
    25 {
    26     n=ra(); mod=ra(); fac[0]=1;
    27     for (int i=1; i<=n; i++) fac[i]=fac[i-1]*i%mod;
    28     inv[0]=inv[1]=1;
    29     for (int i=2; i<=n; i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    30     for (int i=2; i<=n; i++) inv[i]=inv[i]*inv[i-1]%mod;
    31     for (int i=n; i>=1; i--)
    32     {
    33         size[i]=size[i<<1]+size[i<<1|1]+1;
    34         f[i]=((i<<1)>n?1:f[i<<1])*((i<<1|1)>n?1:f[i<<1|1])%mod*C(size[i]-1,size[i<<1])%mod;
    35     }    
    36     cout<<f[1]<<endl;
    37     return 0;
    38 }
  • 相关阅读:
    知识图谱
    spring mvc踩坑记
    学习计划
    迷茫中看见一道曙光
    面试复习准备
    关于配置httpd2.4.18+php5.6
    notepad++ 等用正则表达式自动添加sql引号(宏)
    JDK1.8的HashMap实现原理和源码解析
    Java垃圾回收机制
    sql server 表分区
  • 原文地址:https://www.cnblogs.com/ccd2333/p/6737340.html
Copyright © 2011-2022 走看看