組合數 cnmc_n^mc
nm
表示的是從 n 個互不相同的物品中選出 m 個物品的方案數。舉個例子,從 (1;2;3) 三個物品中選擇兩個物品可以有 (1;2);(1;3);(2;3) 這三種選擇方法。根據組合數的定義,我們可以給出計算組合數 cnmc_n^mc
nm
的一般公式:
cnm=n!m!(n−m)!c_n^m = \fracc
nm
=m
!(n−
m)!
n!
其中 n! = 1 × 2 × · · · × n。(特別的,當 n = 0 時, n! = 1 ,當 m > n 時, cnm=0c_n^m =0c
nm
=0)
小蔥在 noip 的時候學習了 cijc_i^jc
ij
和 k 的倍數關係,現在他想更進一步,研究更多關於組合數的性質。小蔥發現, cijc_i^jc
ij
是否是 k 的倍數,取決於 cijmodkc_i^j mod k c
ij
mod
k是否等於 0,這個神奇的性質引發了小蔥對 mod 運算(取餘數)的興趣。現在小蔥選擇了是四個整數n; p; k; r,小蔥現在希望知道
∑i=0infcnkik+rmodp\sum_^ c_^ mod p∑
i=0
infc
nk
ik+r
mo
dp的值。輸入格式:
第一行有四個整數 n; p; k;r,所有整數含義見問題描述。
輸出格式:
一行乙個整數代表答案。
輸入樣例#1:
2 10007 2 0
輸出樣例#1:
8
輸入樣例#2:
20 10007 20 0
輸出樣例#2:
176
• 對於 30% 的測試點, 1 ≤ n; k ≤ 30, p 是質數;
• 對於另外 5% 的測試點, p = 2;
• 對於另外 5% 的測試點, k = 1;
• 對於另外 10% 的測試點, k = 2;
• 對於另外 15% 的測試點, 1 ≤ n ≤ 10^3; 1 ≤ k ≤ 50, p 是質數;
• 對於另外 15% 的測試點, 1 ≤ n × k ≤ 10^6, p 是質數;
• 對於另外 10% 的測試點, 1 ≤ n ≤ 10^9; 1 ≤ k ≤ 50, p 是質數;
• 對於 100% 的測試點, 1 ≤ n ≤ 10^9; 0 ≤ r < k ≤ 50; 2 ≤ p ≤ 2^30 − 1。
題解
一道矩陣加速的題。
對組合數的乙個變形。原組合數公式是f[i][j]=f[i-1][j]+f[i-1][j-1]。由於這題是i*k+r,所以設f[i][j]表示i個物品中選x個物品,x滿足x%k=j,所以f[i][j]=f[i-1][j]+f[i-1][(j-1+k)%k]。為什麼呢??由原組合數公式可知,f[i][a*k+j]=f[i-1][a*k+j]+f[i-1][a*k+j-1]。所以sigmaf[i][a*k+j]=sigmaf[i-1][a*k+j]+sigmaf[i-1][a*k+j]。。因為設g[i][j]=sigma(a從0~乙個值)f[a*k+j];(這裡g[i][j]含義同上面f[i][j])。由於j-1會出現負的,也就是當j=0時,表示整除,由楊輝三角可知,前乙個是k-1,所以f[i][j]=f[i-1][j]+f[i][(j-1+k)%k]。
遞推式證完了,下面該說怎麼推矩陣了。
像這種二維的遞推,第一行矩陣一般把第二維都寫出來再根據下乙個推矩陣。就是由f[i][0],f[i][1],f[i][2].....f[i][k-1]看怎樣推成f[i+1][0],f[i+1][1],f[i+1][2]......f[i+1][k-1],自己手推一下矩陣吧。最後結果就是f[0][r].因為第一行是f[i][0],f[i][1]....
下面就是矩陣加速了。。。不再贅述。
#include#include#include#include#define ll long long
using namespace std;
const int maxn=60;
ll n,p,k,r;
struct nodea,b,c,ans;
node work(node a,node b)
}int main(){
cin>>n>>p>>k>>r;
for(int i=0;i
洛谷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 其...
六省聯考2017
luogu lojbzoj 顯然我們只需要考慮最後公布成績的那一天。列舉這一天,預處理字首和之後即可 o 1 計算最小代價。注意倒數第二個subtask這最優的日期就是 min b i 直接計算即可。如果套用通法會爆long long,但是開unsigned long long就行了 include...
六省聯考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 求組合數,...