SHOI2017 組合數問題

2022-05-10 05:28:09 字數 1365 閱讀 2103

給定\(n,r,k,p\)

\(1 \leq n \leq 10^9\)

\(0 \leq r,k \leq 50\)

\(2 \leq p \leq 2^+1\)

求\[\left(\sum_^\infty ^}\right) \ mod \ p \]即

\[(c_^+c_^+c_^+...+c_^+c_^+...) \ mod \ p

\]根據\(c\)的另乙個遞推式:

\[c_^=c_^+c_^

\]我們做一些改變

令\(dp_\)表示取\(i\)個,取的個數模\(k\)餘\(j\)的方案總數

遞推式很類似:

\[dp_=dp_+dp_

\]這個式子就可以矩陣乘法加速

\[ \left[

\begin

1&0&0&0&\cdots&0&1 \\

1&1&0&0&\cdots&0&0 \\

0&1&1&0&\cdots&0&0 \\

0&0&1&1&\cdots&0&0 \\

\vdots&\vdots&\vdots&\vdots&\ddots&\vdots&\vdots \\

0&0&0&0&\cdots&1&1 \\

1&0&0&0&\cdots&0&1

\end

\right]

\left[

\begin

dp_ \\

dp_ \\

dp_ \\

dp_ \\

\vdots \\

dp_ \\

dp_\end

\right]

= \left[

\begin

dp_ \\

dp_ \\

dp_ \\

dp_ \\

\vdots \\

dp_ \\

dp_\end

\right]

\]答案即為\(dp_\)(在\(nk\)個元素中取的個數模\(k\)餘\(r\)的方案總和)

複雜度\(o(k^3lognk)\)

要注意一下,\(k=1\)的時候矩陣長這樣:

\[ \left[

\begin

2 \end

\right]

\]

#include#include#includelong long n,p,k,r;

struct matrix

};matrix operator * (matrix &a,matrix &b)

int main()

s=fast_pow(s,n*k);

printf("%d",s.m[r][0]);

}

Shoi2017 組合數問題 BZOJ4870

這道題可以根據組合數的實際意義來理解,就是從n k個物品中選擇除k餘r個物品的方案數,那麼就可以得到用f i j 表示在前i個物品中,選擇j個物品的方案數,其中j是對k取模後的結果,那麼f i j f i 1 j 在第i為不取 f i 1 j 1 k k 在第i為取 可以發現,第i位只與i 1位有關...

SHOI 2017 壽司餐廳

題目鏈結 演算法 注意到題目中的限制條件可表述為 若選擇區間 l r 則必須選擇區間 l 1 r 和 l r 1 這種依賴關係可以讓我們聯想到用最大權閉合子 題 將每種代號建乙個點 每個區間同樣建乙個點 首先將每個形如 i i 的區間向其代號連邊 然後將每個區間 l r 所代表的點向 l 1 r 和...

Bzoj4870 SHOI2017 組合數問題

題目顯得一臉不可做。一般的來說,讀題是不會看前面一些沒有什麼太大意義的話的。確實也如此,譬如題面首句 組合數cm n 表示的是從n個互不相同的物品中選出m個的方案數 想來大家也是知道的 再觀察前面的式子 可以表示成如下形式 q modk rcq n k 回顧題面首句 代入?可以得到講人話的題面,大致...