就是运用\(Lucas\)推一个柿子

首先是前置芝士\(Lucas\)定理

\[C_{n}^{m}\%p=C_{n/p}^{m/p}*C_{n\%p}^{m\%p}\%p\]

至于证明

我建议去问一下Lucas本人

至于这道题,我们要求的是这个柿子

\[\sum_{i=0}^kC_{n}^i\%p\]

于是我们设\(f(n,k)=\sum_{i=0}^kC_{n}^i\)

我们就可以化柿子啦

\[f(n,k)=\sum_{i=0}^kC_{n}^i\]

\[\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }\text{ }=\sum_{i=0}^kC_{n/p}^{i/p}*C_{n\%p}^{i\%p}\]

这个东西一看就很熟悉,\(n/p\)啊,显然跟整除分块差不多啊

\[=C_{n/p}^0\sum_{i=0}^{p-1}C_{n\%p}^i+C_{n/p}^1\sum_{i=0}^{p-1}C_{n\%p}^i+...+C_{n/p}^{k/p}\sum_{i=0}^{k\%p}C_{n\%p}^i\]

前面有\(0\)到\(k/p-1\)这些个整块,于是我们可以将\(\sum_{i=0}^{p-1}C_{n\%p}^i\)提出来

变成

\[\sum_{i=0}^{p-1}C_{n\%p}^i*(C_{n/p}^0+C_{n/p}^1+...C_{n/p}^{k/p-1})\]

那这个东西岂不是可以写成

\[f(n\%p,p-1)*f(n/p,k/p-1)\]

在加上那个不完整的块

\(\sum_{i=0}^{k\%p}C_{n\%p}^i\)可以写成\(f(n\%p,k\%p)\)

于是就有

\[f(n,k)=f(n\%p,p-1)*f(n/p,k/p-1)+C_{n/p}^{k/p}*f(n\%p,k\%p)\]

由于\(n\%p\)还有\(k\%p\)都小于\(2333\),所以\(f(n\%p,p-1)\)还有\(f(n\%p,k\%p)\)可以直接预处理好可以直接求出来

至于那个\(C_{n/p}^{k/p}\)就直接上\(Lucas\)好了

时间复杂度\(O(p^2+Tlog_{2333}^2n)\)

代码

非常sb的把\(C_0^0\)当成\(0\)WA了好几发

#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define LL long long
#define maxn 2335
const int P=2333;
LL c[maxn+2][maxn+2];
LL f[maxn+2][maxn+2];
inline LL Lucas(LL n,LL m)
{if(!m) return 1;if(n==m) return 1;if(n<m) return 0;return c[n%P][m%P]*Lucas(n/P,m/P)%P;
}
inline LL F(LL n,LL k)
{if(k<0) return 0;if(!n) return 1;if(!k) return 1;if(n<P&&k<P) return f[n][k];return (F(n/P,k/P-1)*f[n%P][P-1]%P+Lucas(n/P,k/P)*f[n%P][k%P]%P)%P;
}
int main()
{int T;scanf("%d",&T);c[0][0]=1;for(re int i=1;i<=maxn;i++) c[i][i]=c[i][0]=1;for(re int i=1;i<=maxn;i++)for(re int j=1;j<i;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%P;f[0][0]=1;for(re int i=1;i<=maxn;i++) f[i][0]=1;for(re int i=0;i<=maxn;i++)for(re int j=1;j<=maxn;j++)f[i][j]=(c[i][j]+f[i][j-1])%P;LL n,k;while(T--){scanf("%lld%lld",&n,&k);printf("%lld\n",F(n,k));}return 0;
}

转载于:https://www.cnblogs.com/asuldb/p/10206227.html

【[SHOI2015]超能粒子炮·改】相关推荐

  1. 【BZOJ4591】[SHOI2015]超能粒子炮·改 (卢卡斯定理)

    [BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. ...

  2. P4345 [SHOI2015]超能粒子炮·改

    P4345 [SHOI2015]超能粒子炮·改 题意: 求解式子∑i=0kCni%p\sum_{i=0}^{k}C_{n}^{i} \% p∑i=0k​Cni​%p n,k<=1e18 题解: ...

  3. [2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改

    以下除法一律为整除. 求\(\sum_{i=0}^kC_n^i\ mod\ p,p=2333\) 设\(f(i,j)=\sum_{k=0}^jC_i^k\) \(f(n,k)=\sum_{i=0}^k ...

  4. BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)

    注意到模数很小,容易想到使用卢卡斯定理,即变成一个2333进制数各位组合数的乘积.对于k的限制容易想到数位dp.可以预处理一发2333以内的组合数及组合数前缀和,然后设f[i][0/1]为前i位是否卡 ...

  5. [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)

    大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算. 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积. 数位DP,f[i][0/1]表示从高到低第i位,这 ...

  6. [SHOI2015] 超能粒子炮·改

    题目链接:戳我 设\(f[n][k]=\sum_{i=0}^kC_n^i\pmod {2333}\) 那么根据卢卡斯定理我们知道\(f[n][k]=\sum_{i=0}^kC_{n/p}^{i/p}\ ...

  7. loj2038「SHOI2015」超能粒子炮・改(卢卡斯的理解和延伸+数位dp)

    我们发现暴力+裸的卢卡斯可以骗到50分 所以就应该朝卢卡斯的方向去想. 卢卡斯是把n,k拆成两个p进制数进行统计的. 注意到如果在某一位ai>nia_i>n_iai​>ni​,a表示 ...

  8. P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】

    正题 题目链接:https://www.luogu.com.cn/problem/P4345 题目大意 TTT组询问,给出n,kn,kn,k求 ∑i=0k(ni)\sum_{i=0}^{k}\bino ...

  9. 超能粒子炮·改 HYSBZ - 4591

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4591 就是求:                    C(n,0)+C(n,1)+... ...

最新文章

  1. 《游戏大师Chris Crawford谈互动叙事》一第 9 章 互动小说
  2. HTML有几种发音模式,html – 使用lang属性和拼音发音的正确方法是什么(如果有的话)?...
  3. 在Filter 无法跳转地址
  4. Android 中三种启用线程的方法
  5. matlab怎么求矩阵的范数
  6. 第三次学JAVA再学不好就吃翔(part2)--基础语法之注释
  7. 智能语音市场有多大? 阿里巴巴将如何破局后来者居上?
  8. maven 阿里下载源 setting.xml
  9. 第二人生的源码分析(9)登录界面显示
  10. 面向对象使用python-docx模块制作格式化文本(奖状生成器)
  11. 使用Picasso加载图片的内存优化实践
  12. 电偶极子的MATLAB场模拟
  13. 访问页面升级访问_BPC页面访问缓慢无报错
  14. 傅里叶级数的复数形式
  15. Grpc学习之map变量
  16. 八类网线和七类网线的区别_Cat8 八类网线是什么?与Cat5、Cat6、Cat7网线的区别?...
  17. 切换windows系统版本
  18. 域名注册条件有哪些?需要提交哪些材料?
  19. 深入浅出数据分析读书笔记
  20. ssm中小企业仓库管理信息系统毕业设计源码

热门文章

  1. 洛谷 P1939 【模板】矩阵加速(数列)
  2. AttributeError: module 're' has no attribute 'sub'
  3. android UI
  4. Qt 程序打包发布总结
  5. mysql获取相隔时间段的数据
  6. 微信小程序需要https后台的创业机会思考
  7. ubuntu下安装JDK和netbeans
  8. ImagesSprite V1.1.1 Beta发布
  9. Linux信号处理机制
  10. nohup 命令 用途:不挂断地运行命令