給你\(t\)組詢問,每組詢問給定引數\(n,k\),計算\(\sum\limits_^k\dbinom\bmod 2333\).這題其實是\(\operatorname\)定理的乙個簡單擴充套件。\(t\leq10^5,n,k\leq10^\).
方便起見,令\(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 這一檔對正解...