ZJOI2010 排列計數

2021-08-26 05:51:29 字數 922 閱讀 1721

不是很懂為什麼洛谷上這題標籤有數字dp,於是我被騙來做這道題。不過上一道題也是一樣,其實也是組合數學。

題意其實是求1..

n1..n

1..n

的排列中有多少個可以構成小根堆。

f [i

]f[i]

f[i]

表示以i

ii為根的樹的方案數,l,r

l,rl,

r是左,右子樹結點個數,那麼有:

f [i

]=f[

l]∗f

[r]∗

c(i−

1,l)

f[i]=f[l]*f[r]*c(i-1,l)

f[i]=f

[l]∗

f[r]

∗c(i

−1,l

)組合數用luc

as

lucas

luca

s定理就好解決了。

#include#define ll long long

#define li (i<<1)

#define ri (li|1)

using namespace std;

const int n=5e6+5;

int mo,n;

ll f[n],fac[n],s[n];

void init(int n)

inline ll qpow(ll x,ll p,int mo)

return res;

}inline ll c(ll n,ll m,int mo)

return c(n/mo,m/mo,mo)*c(n%mo,m%mo,mo)%mo;

}int main()

return !printf("%lld",f[1]);

}

ZJOI2010 排列計數

求1 n的全排列 p i 的個數,滿足對於 i geq 2 有 p i p 隨手畫個圖就可以發現問題是求大小為 n 的小根堆的個數 由於左右子樹互不影響,直接dp即可,設 dp 表示以 i 為根的小根堆的個數,有 dp i dp dp c size i 1 size 注意本題模數可能小於 n 所以要...

ZJOI2010 排列計數

注意觀察題目 pi pi 2 發現特別像什麼?二叉堆!於是就變成了 n 個堆元素進行排列,滿足堆性質的排列對 p 的取模。堆性質根據題意為大根堆 設 f i 為當前堆首為 i 的堆的排列方案數。為滿足堆性質 p i 顯然只能取剩下若干數的最大值。發現 f i 影響 f 和 f 兩個結點。以 i 為根...

ZJOI2010 排列計數

稱乙個1,2,n的排列p1,p2.pn是magic的,當且僅當2 i n時,pi pi 2.計算1,2,n的排列中有多少是magic的,答案可能很大,只能輸出模p以後的值 輸入檔案的第一行包含兩個整數 n和p,含義如上所述。輸出檔案中僅包含乙個整數,表示計算1,2,的排列中,magic排列的個數模 ...