大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算。

于是问题变成求1~k的所有2333进制数上每一位数的组合数之积。

数位DP,f[i][0/1]表示从高到低第i位,这一位没卡/卡了限制,的组合数之积,转移显然。

WA 8发,都想抽死自己。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++)
 4 typedef long long ll;
 5 using namespace std;
 6
 7 const int N=3010,P=2333;
 8 int T,tot,tot2,C[N][N],S[N][N],a[N],b[N],f[N][2];
 9 ll n,k;
10
11 int main(){
12     freopen("bzoj4591.in","r",stdin);
13     freopen("bzoj4591.out","w",stdout);
14     C[0][0]=1; rep(i,0,P) S[0][i]=1;
15     rep(i,1,P){
16         C[i][0]=S[i][0]=1;
17         rep(j,1,P) C[i][j]=(C[i-1][j-1]+C[i-1][j])%P,S[i][j]=(S[i][j-1]+C[i][j])%P;
18     }
19     for (scanf("%d",&T); T--; ){
20         scanf("%lld%lld",&n,&k); tot=0;
21         while (n) a[++tot]=n%P,n/=P;
22         rep(i,1,tot) b[i]=k%P,k/=P;
23         f[tot+1][0]=0; f[tot+1][1]=1;
24         for (int i=tot; i; i--){
25             f[i][0]=f[i+1][0]*S[a[i]][P-1]%P;
26             if (b[i]) f[i][0]=(f[i][0]+f[i+1][1]*S[a[i]][b[i]-1]%P)%P;
27             f[i][1]=f[i+1][1]*C[a[i]][b[i]]%P;
28         }
29         printf("%d\n",(f[1][0]+f[1][1])%P);
30     }
31     return 0;
32 }

转载于:https://www.cnblogs.com/HocRiser/p/9920532.html

[BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)相关推荐

  1. [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 ...

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

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

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

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

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

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

  5. 【[SHOI2015]超能粒子炮·改】

    就是运用\(Lucas\)推一个柿子 首先是前置芝士\(Lucas\)定理 \[C_{n}^{m}\%p=C_{n/p}^{m/p}*C_{n\%p}^{m\%p}\%p\] 至于证明 我建议去问一下 ...

  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. 超能粒子炮·改 HYSBZ - 4591

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

  8. BZOJ4737 组合数问题 【Lucas定理 + 数位dp】

    题目 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3)三个物品中选择两个物品可以有( 1,2),(1,3),(2,3)这三种选择方法.根据组合数的定义,我们可以给 ...

  9. bzoj 1902: Zju2116 Christopher lucas定理 数位DP

    1902: Zju2116 Christopher Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 172  Solved: 67 [Submit][St ...

最新文章

  1. AI干货系列一:为什么AI预测更智能?
  2. ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
  3. Unable to resolve target 'android-19'
  4. visual basic.net 2019-当前内存状态、字符串内插、操作系统系统信息
  5. javafx 调用java_Java,JavaFX的流畅设计风格滑块
  6. html中两个div垂直居中对齐,在div中垂直居中的两个元素
  7. IOT---(6)Android Things 开发环境搭建
  8. 春日 [宋] 王安石
  9. mysql linux 中文乱码怎么解决_如何解决mysql linux 中文乱码的问题
  10. 工作问题总结-----付款
  11. mac系统maven spring mvc小试牛刀
  12. 分布式系统关注点——如何去实施「负载均衡」?
  13. 【图像去雾】基于matlab偏振水下模糊图像去雾【含Matlab源码 396期】
  14. 微信小程序实战–集阅读与电影于一体的小程序项目(二)
  15. mysql强行关闭回滚中的进程_mysql查询正在执行的进程
  16. 心已被爱伤透,情已为爱枯竭
  17. 【微信红包】恭喜发财,大吉大利
  18. 跨境电商平台运营知识:亚马逊日常运营技巧
  19. outlook计算机应用基础,计算机应用基础Outlook.doc
  20. 你也许不知道的5个微信小技巧

热门文章

  1. MAC-VBox-Centos6.6安装增强功能
  2. 十进制与二进制,八进制,十六进制的转换
  3. HDSF主要节点解说(二)工作原理
  4. 线程执行android的looper,handler消息小结
  5. 移植的7zip到Vxworks 取名vx7zip
  6. 安卓手机端口号怎么查看_微信小程序怎么查看手机便签待办事项?
  7. android获取该控件在屏幕,android获取屏幕宽高与获取控件宽高(三种方法)
  8. 40Linux组41Linux所有者42Linux所在组43Linux修改所有组
  9. oracle varchar2() 占几个字母,Oracle number date varchar2字段类型占用空间大小
  10. php 2010excel,PHPExcel在php5.2.10上的bug