「SHOI2015」超能粒子炮・改

题目链接

算法:

         我们设每一组n与k的数据的所求答案为CNLZP(n,k),(聪明的人已经发现了秘密所在)

         则CNLZP(n,k)=\sum_{i=0}^{k}C_{n}^{i} mod 2333,设模数p=2333.

         根据卢卡斯定理,原式=\sum_{i=0}^{k}C_{\left [ n/p \right ]}^{\left [ i/p \right ]}*C_{n mod p}^{i mod p} mod p

         且可以把它拆成\sum_{i=0}^{k-1}C_{\left [ n/p \right ]}^{0}*C_{nmodp}^{i}+\sum_{i=0}^{k-1}C_{\left [ n/p \right ]}^{1}*C_{nmodp}^{i}......+\sum_{i=0}^{kmodp}C_{\left [ n/p\right ]}^{\left [ k/p \right ]}*C_{nmodp}^{i}

          进一步化为\sum_{i=0}^{k-1}C_{nmodp}^{i}*(C_{\left [ n/p \right ]}^{0}+C_{\left [ n/p \right ]}^{1}+...C_{\left [ n/p \right ]}^{\left [ k/p \right ]-1})+\sum_{i=0}^{kmodp}C_{\left [ n/p \right ]}^{\left [ k/p \right ]}*C_{nmodp}^{i}

                         =\sum_{i=0}^{k-1}C_{nmodp}^{i}*\sum_{i=0}^{\left [ k/p \right ]-1}C_{nmodp}^{i}+C_{\left [ n/p \right ]}^{\left [ k/p \right ]}*\sum_{i=0}^{kmodp}C_{nmodp}^{i}

           根据对CNLZP(n,k)的定义,原式= 

                            CNLZP(Nmodp,p-1)*CNLZP(\left[N/p\right],\left[K/p\right]-1)+CNLZP(Nmodp,Kmodp)C_{\left [ n/p \right ]}^{\left [ k/p \right ]}

            此时计算的时间复杂度已绰绰有余(没错就是笔者不会算),预处理组合数,套用卢卡斯定理即可。

            借https://35178.blog.luogu.org/solution-p4345博客中的时间复杂度:O(p^2,Tlog_{2333}^{2}n)

Code:

#include
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define rep2(i,j,k) for(int i=j;i>=k;i--)
#define mo 2333
using namespace std;
template void read(T &num){char c=getchar();num=0;T f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){num=(num<<3)+(num<<1)+(c^48);c=getchar();}num*=f;
}
template void qwq(T x){if(x>9)qwq(x/10);putchar(x%10+'0');
}
template void write(T x){if(x<0){x=-x;putchar('-');}qwq(x);putchar('\n');
}
int c[2400][2400];
inline void C(){rep(i,0,mo-1){rep(j,0,mo-1){if(i

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部