稱乙個1,2,...,n的排列p1,p2...,pn是magic的,當且僅當2<=i<=n時,pi>pi/2. 計算1,2,...n的排列中有多少是magic的,答案可能很大,只能輸出模p以後的值
input
輸入檔案的第一行包含兩個整數 n和p,含義如上所述。
output
輸出檔案中僅包含乙個整數,表示計算1,2,⋯, �的排列中, magic排列的個數模 p的值。
sample input
20 23sample output
16hint
100%的資料中,1 ≤ � n ≤ 106, p� ≤ 10^9,p是乙個質數。 資料有所加強
題解:題目意思比較好理解,就是問你有多少種小根堆,那麼根可以確定,然後左邊右邊就是
組合一下,確定,如果只有乙個點,那麼方案數就為1,size為1,不然就是左右子樹合併。
這樣瞎搞。。。(⊙o⊙)…,就好了。
1 #include2 #include3 #include4 #include5 #include6#define n 1000007
7#define m 1007
8#define ll long long
9using
namespace
std;
1011
intn,p;
12ll fac[n],ni[n],f[n];
13int
siz[n];
1415 ll c(int n,int
m)16
21int
main()
2241
else
if(i*2
<=n)
4246
else
4751
}52 printf("
%lld\n
",f[1
]);53 }
bzoj2111 perm 排列計數
記憶體限制 512 mib 時間限制 1000 ms 標準輸入輸出 題目描述 稱乙個1,2,n的排列p1,p2.pn是magic的,當且僅當2 i n時,pi pi 2.計算1,2,n的排列中有多少是magic的,答案可能很大,只能輸出模p以後的值 輸入格式 輸入檔案的第一行包含兩個整數 n和p,含...
bzoj2111 Perm 排列計數 組合數學
一開始以為當i為奇數時不需要pi pi 2,翻了一下題解發現 2是整除。然後這實際上就是求一顆節點數為n的大根堆有多少種。定義f i 為這可樹種以i為根的子樹的方案數,s i 表示子樹的節點數,那麼考慮s i 個數,一定是將最小的給i,剩餘的s i 1 個給左兒子,這s i 1 個可以隨機取,因此共...
Perm排列計數(bzoj2111)
time limit 10 sec memory limit 259 mb submit 2686 solved 811 submit status discuss 稱乙個1,2,n的排列p1,p2 pn是magic的,當且僅當2 i n時,pi pi 2.計算1,2,n的排列中有多少是magic的...