首先我們要明確題目要我們求的是這個式子:
\[\sum_^kc_n^i
\]我們先從部分分看起:
預處理出組合數暴力算就是了。複雜度\(o(n^2)\)
由於我們要求的東西是在楊輝三角的一行,所以我們可以遞推求出改行組合數,遞推式為\(c_n^ = c_n^m\ *\ \frac\),證明的話就用組合數的定義式即可。複雜度\(o(k)\)
這一檔對正解有一定啟發意義
跟據lucas定理(什麼你還不會lucas???)
\[c_n^i\ \%\ p = c_^\ *\ c_^\ \%\ p
\]我們可以將原式化成:
\[\sum_^\ c_^\ *\ c_^\ \%\ p
\]等一下,\(i\ /\ p\)和\(n\ /\ p\)有迴圈節, \(i\ /\ p\)和\(n\ /\ p\)在很多時候都是相等的啊!
於是我們可以自然地想到:記
\[f[j] = \sum_^\ c_^\ \%\ p
\]由於p不是很大,所以我們可以預處理出f陣列
於是我們的複雜度可以從$o(t\ *\ 10^\ *\ \(盧卡斯複雜度\))\(優化成\)o(t\ *\ k\ *\ \(盧卡斯複雜度\)\ /\ 2333)$
#includeusing namespace std;
#define il inline
#define re register
#define int long long
il int read()
while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
return x * f;
}#define p 2333
#define rep(i, s, t) for(re int i = s; i <= t; ++ i)
#define maxn 3000
int n, m, c[maxn][maxn], f[maxn][maxn], ans, k;
il int lucas(int n, int m)
signed main()
int t = read();
while(t --)
return 0;
}
我們再來思考我們50-2慢在了**?
我們在算
for(; k <= m - p; k += p) ans = (ans + f[n % p][n % p] * lucas(n / p, k / p)) % p;
的時候時間複雜度開銷很大,但是我們如果提出\(f[n\ \%\ p][n\ \%\ p]\),柿子就成
\[\sum_^c_^i
\]哎,這部可以遞迴算嗎?
所以我們可以推出:
\[f(i, j) = f[n\ \%\ p][n\ \%\ p] * f(\frac, \frac - 1) + lucas(\frac, \frac) * f[n\ \%\ p][min(n\ \%\ p, m\ \%\ p)]
\]
#includeusing namespace std;
#define il inline
#define re register
#define int long long
il int read()
while(c >= '0' && c <= '9') x = x * 10 + c - 48, c = getchar();
return x * f;
}#define p 2333
#define rep(i, s, t) for(re int i = s; i <= t; ++ i)
#define maxn 3000
int n, m, c[maxn][maxn], f[maxn][maxn];
il int lucas(int n, int m)
il int f(int n, int m)
signed main()
int t = read();
while(t --)
return 0;
}
SHOI2015 超能粒子炮 改
設 f n k sum kc n i pmod 那麼根據盧卡斯定理我們知道 f n k sum kc times c c 0 times sum c i c 1 times sum c i c times sum c i c times sum c i sum c i times c 0 c 1 c...
SHOI2015 超能粒子炮 改
求 sum 2333 n,k leq 10 如果直接套盧卡斯還是比較容易想到分塊求解的 由 c n i c times c 可知,i p 相同的組合數另一部分分別是 i p,i p 1,i p 2.這部分可以搓到一起 令 s n k sum 具體來說,將這部分相同的部分放到一起,剩下的地方直接計算 ...
SHOI2015 超能粒子炮 改
給你 t 組詢問,每組詢問給定引數 n,k 計算 sum limits k dbinom bmod 2333 t leq10 5,n,k leq10 這題其實是 operatorname 定理的乙個簡單擴充套件。方便起見,令 p 2333 首先利用 operatorname 定理化簡所求和式,由 d...