內網傳送門
外網傳送門
做這道題之前,先儲備一些關於組合數的知識吧
c nm
=cnn
−m
c_n^m=c_n^
cnm=c
nn−mcn
m=cn
−1m+
cn−1
m−
1c_n^m=c_^m+c_^
cnm=c
n−1m
+cn
−1m−
1c n0
+cn1
+cn2
+...
+cnn
=2
nc_n^0+c_n^1+c_n^2+...+c_n^n=2^n
cn0+c
n1+
cn2
+...
+cnn
=2n
注:這些公式可能對下面的題解無關,但對自己推公式的話應該是有一定幫助的
30 pts:
根據乘法原理,最後的答案為每個環節的方案數乘起來。
根據加法原理,每個環節的方案書為 ∑j=
lrcj
ki+j
−l
\sum_^ \;c_^
∑j=lr
cjki
+j−
l。可以直接預處理出組合數,然後 o(nmnm
nm)暴力列舉求解即可。
60 pts:
容易發現我們加的是組合數表中乙個斜線上的所有組合數。
o( n2
)(n^2)
(n2)
預處理組合數及其斜線上的字首和,然後 o(m)
(m)(m
) 統計。
100 pts:
注意到以下公式的轉換:
∑ j=
lrcj
ki+j
−l=∑
j=lr
cjl−
ki=c
r+1l
−ki+
1−cl
l−ki
+1
\sum_^c_^=\sum_^c_^=c_^-c_^
j=l∑r
cjki
+j−
l=j
=l∑r
cjl
−ki
=cr
+1l−
ki+
1−c
ll−k
i+1
因此我們只需求兩個組合數即可,預處理出階乘和階乘的逆元即可
#include
#include
#include
#define n 100005
#define mod 1000000007
using
namespace std;
int fac[n]
,inv[n]
;int
dec(
int x,
int y)
intmul
(int x,
int y)
intc
(int n,
int m)
intpower
(int a,
int b)
return ans;
}int
main()
printf
("%d"
,ans)
;// fclose(stdin);
// fclose(stdout);
return0;
}
NOIP提高模擬 20181016 T1 膜法
之前在考試的時候,因為太菜,沒有想到正解,因而打了乙個30pt s30pts 30pt s的暴力,居然沒有t。30 pt s30pts 30pts做法 根據乘法原理,最終答案為每個環節的方案數乘起來。根據加法原理,乙個環節的方案數為 j lrck i j lj sum c j l r cki j l...
NOIP提高模擬 20181016 T1 膜法
之前在考試的時候,因為太菜,沒有想到正解,因而打了乙個30 pts的暴力,居然沒有t。30 pts做法 根據乘法原理,最終答案為每個環節的方案數乘起來。根據加法原理,乙個環節的方案數為j l r cki j l j o n2 預處理組合數,然後 o nm 統計即可。10 0pts 做法每個環節實際上...
NOIP校內模擬 T1 膜法(組合數)
整理題意後 對於每個詢問其實就是 由於c m,n c m,m n 就變成了 其實就是在楊輝三角上的一列求其中的一段和 然後有個玄學的公式 什麼意思呢 證明是很容易得到的 所以把階乘預處理出來 由於1e9 7是質數 可以用費馬小定理算逆元 就可以o 1 回答 include define n 1000...