2018 10 16測試T1 膜法

2021-08-29 03:53:11 字數 1822 閱讀 2563

內網傳送門

外網傳送門

做這道題之前,先儲備一些關於組合數的知識吧

c nm

=cnn

−m

c_n^m=c_n^

cnm​=c

nn−m​cn

m=cn

−1m+

cn−1

m−

1c_n^m=c_^m+c_^

cnm​=c

n−1m

​+cn

−1m−

1​c 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...