六省聯考2017 組合數問題

2022-08-02 18:03:10 字數 846 閱讀 9932

點此看題

其實不一定是遞推問題才想矩陣加速,比如某個東西很大,但是某個東西很小的時候就可以嘗試矩陣乘法了。

這道題就用很小的量來定義狀態就行了,設 \(f(i,j)\) 表示考慮了 \(i\) 個數,選的總數模 \(k\) 是 \(j\),那麼每次就考慮這個數選還是不選,不難寫出轉移(第二維在模意義下):

\[f(i,j)=f(i-1,j)+f(i-1,j-1)

\]這個就很容易矩陣乘法了,時間複雜度 \(o(k^3\log(nk))\),注意考慮下 \(k=1\) 的情況。

還有乙個做法也是利用了快速冪去算這東西,只不過用的是多項式的快速冪。那麼如果我們要去套多項式快速冪怎麼辦呢?這就要求我們找到溝通組合數和多項式的橋梁了,這裡可以用二項式定理:

\[\begin

&=\sum_\\

&=\sum_[x^i](1+x)^\\

&=[x^r]((1+x)^\bmod (x^k-1))

\end

\]直接迴圈卷積快速冪,時間複雜度 \(o(k^2\log (nk))\),不會真的有人無聊到去寫多項式乘法吧。

#include const int m = 1005;

#define int long long

int read()

while(c>='0' && c<='9')

return x*f;

}int n,p,k,r,a[m],b[m],a[m],b[m];

void mul(int *a,int *b)

printf("%lld\n",b[r]);

}

六省聯考2017 組合數問題

六省聯考2017 組合數問題 寫數學題總是沒有思路,還是太菜了。題目大意 給定n,p,k,r,你要求的是 c nk,x p的值,其中x k r。n是1e9,k是50,p是1 2 32中任意乙個數,不保證為質數。這道題難在思路的轉化,如果你在思考怎麼快速求組合數,什麼o n 預處理,o 1 求組合數,...

洛谷3746 六省聯考2017 組合數問題

組合數 cnmc n mc n m 表示的是從 n 個互不相同的物品中選出 m 個物品的方案數。舉個例子,從 1 2 3 三個物品中選擇兩個物品可以有 1 2 1 3 2 3 這三種選擇方法。根據組合數的定義,我們可以給出計算組合數 cnmc n mc n m 的一般公式 cnm n m n m c...

洛谷P3746 六省聯考2017 組合數問題

組合數 c n mcnm 表示的是從 n 個互不相同的物品中選出 m 個物品的方案數。舉個例子,從 1 2 3 三個物品中選擇兩個物品可以有 1 2 1 3 2 3 這三種選擇方法。根據組合數的定義,我們可以給出計算組合數 c n mcnm 的一般公式 c n m fraccnm m n m n 其...