組合數 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!
其中 n! = 1 × 2 × · · · × n。(特別的,當 n = 0 時, n! = 1 ,當 m > n 時, c_n^m =0cnm=0 )
小蔥在 noip 的時候學習了 c_i^jcij和 k 的倍數關係,現在他想更進一步,研究更多關於組合數的性質。小蔥發現, c_i^jcij是否是 k 的倍數,取決於 c_i^j mod kcijmodk 是否等於 0,這個神奇的性質引發了小蔥對 mod 運算(取餘數)的興趣。現在小蔥選擇了是四個整數n; p; k; r,小蔥現在希望知道
\sum_^ c_^ mod p∑i=0infcnkik+rmodp
的值。輸入格式:
第一行有四個整數 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。
作為省選的t3出題人居然給了60分的暴力分,太良心了qwq..
不過正解是死活想不到啊
設$c[i][j]$表示從$i$個元素中,拿所有滿足$x \%k=j $ 的 $x$個元素的方案數
那麼對於第$i$個元素,
不選的方案數為$c[i-1][j]$
選的方案數為$c[i-1][(j-1+k)%k]$
很顯然
可以用矩陣快速冪優化
然後就做完了
這題的關鍵是把楊輝三角的遞推與題目中給出的式子相結合,找到題目中式子的一般規律,
進而通過更高科技的演算法優化
注意$k=1$的特殊情況
#include#include#include
#include
#define int long long
using
namespace
std;
const
int maxn=1e6;
inline
intread()
while(c>='
0'&&c<='9')
return x*f;
}int
n,mod,k,r;
int c[51][51
];struct
matrix
};matrix mul(matrix x,matrix y)
void
out(matrix x)
matrix fastpow(matrix a,
intp)
return
base;}
main()
洛谷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...
六省聯考2017
luogu lojbzoj 顯然我們只需要考慮最後公布成績的那一天。列舉這一天,預處理字首和之後即可 o 1 計算最小代價。注意倒數第二個subtask這最優的日期就是 min b i 直接計算即可。如果套用通法會爆long long,但是開unsigned long long就行了 include...
題解 六省聯考2017
題目順序不是做題順序也不是考試順序更不是難度順序,是隨機順序。為了不影響 體驗決定把 刪去,需要請私信我,qq或皆可。題目裡的難度評分是個人評分,僅供參考開心就好。題意是給定期末考試每門課的出分時間和學生希望的出分時間,如果學生要等就會有不滿意度。你可以進行老師的增加和調換操作,但是都會產生不滿意度...