SHOI2015 超能粒子炮 改

2022-05-27 23:51:12 字數 1256 閱讀 9431

給你\(t\)組詢問,每組詢問給定引數\(n,k\),計算\(\sum\limits_^k\dbinom\bmod 2333\).

\(t\leq10^5,n,k\leq10^\).

這題其實是\(\operatorname\)定理的乙個簡單擴充套件。

方便起見,令\(p=2333\).

首先利用\(\operatorname\)定理化簡所求和式,由\(\dbinom\equiv\dbinom\times\dbinom\pmod p\)得:

\[\begin

\sum_^\binom&\equiv

\sum_^k\binom\binom\\

&\equiv\sum_^\binom\sum_^\binom+\binom\sum_^\binom

\end

\]在該和式中,\(\sum\limits_^\dbinom\)和 \(\sum\limits_^\dbinom\)都可以用\(\omicron(p^2)\)的時間複雜度預處理,而\(\dbinom\)可以利用\(\operatorname\)定理在\(\omicron(\log_pn)\)的時間複雜度內計算。

所以我們只要能夠計算出\(\sum\limits_^\dbinom\)就可以快速計算出\(\sum\limits_^\dbinom\),而這兩個式子形式相同,並且每次\(n,k\)規模減半,所以可以遞迴解決,並且次數不超過\(\log n\)次。

所以總時間複雜度為\(\omicron(t\log^2n+p^2)\).

#includeusing namespace std;

typedef long long ll;

const int mod=2333;

int t,c[mod+5][mod+5],pre[mod+5][mod+5];

inline ll read()

while(ch>='0'&&ch<='9') res=(res<<3)+(res<<1)+(ch-'0'),ch=getchar();

return res*f_f;

}inline void gmo(int &x)

inline void init()

}for (int i=0;i}

}inline int lucas(ll n,ll m,int p)

inline int calc(ll n,ll k,int p)

int main()

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 超能粒子炮 改

首先我們要明確題目要我們求的是這個式子 sum kc n i 我們先從部分分看起 預處理出組合數暴力算就是了。複雜度 o n 2 由於我們要求的東西是在楊輝三角的一行,所以我們可以遞推求出改行組合數,遞推式為 c n c n m frac 證明的話就用組合數的定義式即可。複雜度 o k 這一檔對正解...