六省聯考2017 組合數問題

2021-09-13 14:41:58 字數 851 閱讀 6239

【六省聯考2017】組合數問題

寫數學題總是沒有思路,還是太菜了。

題目大意:給定n,p,k,r,你要求的是σc(nk,x)%p的值,其中x%k=r。n是1e9,k是50,p是1~2^32中任意乙個數,不保證為質數。

這道題難在思路的轉化,如果你在思考怎麼快速求組合數,什麼o(n)預處理,o(1)求組合數,那麼你已經跑偏了,顯然nk這個你o(n)也跑不過。這個要求的組合數也沒什麼特殊的性質,不會是什麼結論題。那唯一的可以發現的方向就是如何把問題轉化為遞推、矩陣加速遞推。設f(i,j)表示σc(i,x)%p,x%k=j。由楊輝三角遞推式,其實可以轉化成f(i,j)=f(i-1,j)+f(i-1,j-1).當然你還得考慮j=0時,回歸原式,你發現其實應該是f(i,j)=f(i-1,j)+f(i-1,(j-1+k)%k)。那麼我們可以設定乙個1*k的狀態矩陣f和乙個k*k的狀態轉移矩陣a,顯然我們需要乘a的nk次冪,用快速冪就好了。最後輸出f【r】就是答案。

#include#define ll long long

using

namespace

std;

int n,r,k,p,a[50][50],f[50][50],c[50][50],ans[50][50

];void mul(int b[50][50],int d[50][50

])int

main()

mul(f,ans);

printf(

"%d\n

",f[0

][r]);

return0;

}

2019-01-18 09:24

kgxpbqbyt 閱讀(

...)

編輯收藏

六省聯考2017 組合數問題

點此看題 其實不一定是遞推問題才想矩陣加速,比如某個東西很大,但是某個東西很小的時候就可以嘗試矩陣乘法了。這道題就用很小的量來定義狀態就行了,設 f i,j 表示考慮了 i 個數,選的總數模 k 是 j 那麼每次就考慮這個數選還是不選,不難寫出轉移 第二維在模意義下 f i,j f i 1,j f ...

洛谷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 其...