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

2021-08-07 18:25:48 字數 2412 閱讀 9453

組合數 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_n^m = \fracc​

n​m​

​=​m

!(n−

m)!​

​n!​

​其中 n! = 1 × 2 × · · · × n。(特別的,當 n = 0 時, n! = 1 ,當 m > n 時, cnm=0c_n^m =0c​

n​m​

​=0)

小蔥在 noip 的時候學習了 cijc_i^jc​

i​j​

​ 和 k 的倍數關係,現在他想更進一步,研究更多關於組合數的性質。小蔥發現, cijc_i^jc​

i​j​

​ 是否是 k 的倍數,取決於 cijmodkc_i^j mod k c​

i​j​

​mod

k是否等於 0,這個神奇的性質引發了小蔥對 mod 運算(取餘數)的興趣。現在小蔥選擇了是四個整數n; p; k; r,小蔥現在希望知道

∑i=0infcnkik+rmodp\sum_^ c_^ mod p∑​

i=0​

inf​​c

​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 求組合數,...