SHOI2015 超能粒子炮 改

2022-05-19 20:26:22 字數 2102 閱讀 7312

首先我們要明確題目要我們求的是這個式子:

\[\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...