[2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改
以下除法一律為整除。
求\(\sum_{i=0}^kC_n^i\ mod\ p,p=2333\)
設(shè)\(f(i,j)=\sum_{k=0}^jC_i^k\)
\(f(n,k)=\sum_{i=0}^kC_n^i\)
當(dāng)\(k\le p,n\le p\),預(yù)處理\(0\le i\le p,0\le j\le i\)的\(C_i^j\)及其前綴和。
否則
\(f(n,k)\)
\(=\sum_{i=0}^kC_{n\ mod\ p}^{i\ mod \ p}\times C_{n/p}^{i/p}\)
\(=\sum_{b=0}^{k/p-1}\sum_{i=0}^{p-1}(C_{n\ mod\ p}^i\times C_{n/p}^)+C_{n/p}^{k/p}\times(\sum_{i=0}^{k\ mod\ p}C_{n\ mod\ p}^i)\)
\(=\sum_{b=0}^{k/p-1}C_{n/p}^\times\sum_{i=0}^{p-1}C_{n\ mod\ p}^i+C_{n/p}^{k/p}\times(\sum_{i=0}^{k\ mod\ p}C_{n\ mod\ p}^i)\)
\(=f(n/p,k/p-1)\times \sum_{i=0}^{p-1}C_{n\ mod\ p}^i+C_{n/p}^{k/p}\times f(n\ mod\ p,k\ mod\ p)\)
\(f(n/p,k/p-1)\)遞歸,\(\sum_{i=0}^{p-1}C_{n\ mod\ p}^i\)預(yù)處理過(guò)了,\(C_{n/p}^{k/p}\)直接lucas定理,\(f(n\ mod\ p,k\ mod\ p)\)也預(yù)處理過(guò)了。
code:
#include<bits/stdc++.h> using namespace std; const long long p=2333; int T,C[p+10][p+10],sum[p+10][p+10]; long long n,k; int Lucas(long long x,long long y){//C_x^yif(y>x)return 0;if(x<=p&&y<=p)return C[x][y];return Lucas(x/p,y/p)*C[x%p][y%p]%p; } int F(long long x,long long y){if(y>x)y=x;if(!y)return 1;if(y<0)return 0;if(x<=p&&y<=p)return sum[x][y];return (F(x/p,y/p-1)*sum[x%p][p-1]%p+Lucas(x/p,y/p)*sum[x%p][y%p]%p)%p; } int main(){C[0][0]=sum[0][0]=1;for(int i=1;i<=p;++i)for(int j=0;j<=i;++j)C[i][j]=(C[i-1][j]+(j?C[i-1][j-1]:0))%p;for(int i=0;i<=p;++i)for(int j=0;j<=p;++j)sum[i][j]=((j?sum[i][j-1]:0)+C[i][j])%p;scanf("%d",&T);while(T--)scanf("%lld%lld",&n,&k),printf("%d\n",F(n,k));return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/xryjr233/p/BZOJ4591.html
總結(jié)
以上是生活随笔為你收集整理的[2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构第二章学习总结
- 下一篇: window mysql8.0 zip