傳送門
看到資料和模數大小就知道要上 lucas 了
然後開始愉快地推公式:
答案為 $\sum _^kc_^\ (mod\ 2333)$
設 $f [ i ] [ j ] = \sum _^jc_^\ (mod\ 2333)\ ,\ p=2333$
那麼根據 lucas 定理得 $f[n][k]=\sum _^k ^c_^}$
看到 $i/p$ 容易想到整除分塊,那就把 $i/p$ 相同的塊提出來看看
$=c_^ \sum _^^}+c_^ \sum _^^}+...+ c_^\sum _^^}$
把$\sum _^^}$ 提出來,得到
$=\sum _^^}(c_^+c_^+...+c_^)+ c_^\sum _^^}$
那就可以寫成 $=f[n\%p][p-1]\cdot f[n/p][k/p-1]+ c_^f[n\%p][k\%p]$
然後就可以遞迴下去求了
注意long long
#include#include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;inline ll read()
while(ch>='
0'&&ch<='
9')
return x*f;
}const
int m=3007,mo=2333
;inline ll fk(ll x)
intt;
ll n,k,f[m][m],c[m][m];
inline ll lucas(ll a,ll b)
//lucas不解釋
inline ll f(ll n,ll k)
void pre()//
預處理,注意c和f範圍不同
for(int i=0;i<=mo;i++)
for(int j=1;j<=mo;j++) f[i][j]=fk(f[i][j-1]+c[i][j]);
}int
main()
return0;
}
P4345 SHOI2015 超能粒子炮改
洛谷 曾經發明了腦洞 儀與超能粒子炮的發明家 shtsc 又公開了他的新發明 超能粒子炮 改 一種可以發射威力更加強大的粒子流的神秘裝置。超能粒子炮 改相比超能粒子炮,在威力上有了本質的提公升。它有兩個引數 n,k 它會向每個編號為 0 到 k 包含兩端 的位置i發射威力為 c bmod 2333 ...
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 具體來說,將這部分相同的部分放到一起,剩下的地方直接計算 ...