[BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)
大组合数取模可以想到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)相关推荐
- [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 ...
- BZOJ4591 SHOI2015超能粒子炮·改(卢卡斯定理+数位dp)
注意到模数很小,容易想到使用卢卡斯定理,即变成一个2333进制数各位组合数的乘积.对于k的限制容易想到数位dp.可以预处理一发2333以内的组合数及组合数前缀和,然后设f[i][0/1]为前i位是否卡 ...
- 【BZOJ4591】[SHOI2015]超能粒子炮·改 (卢卡斯定理)
[BZOJ4591][SHOI2015]超能粒子炮·改 (卢卡斯定理) 题面 BZOJ 洛谷 题解 感天动地!终于不是拓展卢卡斯了!我看到了一个模数,它是质数!!! 看着这个东西就感觉可以递归处理. ...
- P4345 [SHOI2015]超能粒子炮·改
P4345 [SHOI2015]超能粒子炮·改 题意: 求解式子∑i=0kCni%p\sum_{i=0}^{k}C_{n}^{i} \% p∑i=0kCni%p n,k<=1e18 题解: ...
- 【[SHOI2015]超能粒子炮·改】
就是运用\(Lucas\)推一个柿子 首先是前置芝士\(Lucas\)定理 \[C_{n}^{m}\%p=C_{n/p}^{m/p}*C_{n\%p}^{m\%p}\%p\] 至于证明 我建议去问一下 ...
- [SHOI2015] 超能粒子炮·改
题目链接:戳我 设\(f[n][k]=\sum_{i=0}^kC_n^i\pmod {2333}\) 那么根据卢卡斯定理我们知道\(f[n][k]=\sum_{i=0}^kC_{n/p}^{i/p}\ ...
- 超能粒子炮·改 HYSBZ - 4591
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4591 就是求: C(n,0)+C(n,1)+... ...
- BZOJ4737 组合数问题 【Lucas定理 + 数位dp】
题目 组合数C(n,m)表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3)三个物品中选择两个物品可以有( 1,2),(1,3),(2,3)这三种选择方法.根据组合数的定义,我们可以给 ...
- bzoj 1902: Zju2116 Christopher lucas定理 数位DP
1902: Zju2116 Christopher Time Limit: 1 Sec Memory Limit: 64 MB Submit: 172 Solved: 67 [Submit][St ...
最新文章
- AI干货系列一:为什么AI预测更智能?
- ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
- Unable to resolve target 'android-19'
- visual basic.net 2019-当前内存状态、字符串内插、操作系统系统信息
- javafx 调用java_Java,JavaFX的流畅设计风格滑块
- html中两个div垂直居中对齐,在div中垂直居中的两个元素
- IOT---(6)Android Things 开发环境搭建
- 春日 [宋] 王安石
- mysql linux 中文乱码怎么解决_如何解决mysql linux 中文乱码的问题
- 工作问题总结-----付款
- mac系统maven spring mvc小试牛刀
- 分布式系统关注点——如何去实施「负载均衡」?
- 【图像去雾】基于matlab偏振水下模糊图像去雾【含Matlab源码 396期】
- 微信小程序实战–集阅读与电影于一体的小程序项目(二)
- mysql强行关闭回滚中的进程_mysql查询正在执行的进程
- 心已被爱伤透,情已为爱枯竭
- 【微信红包】恭喜发财,大吉大利
- 跨境电商平台运营知识:亚马逊日常运营技巧
- outlook计算机应用基础,计算机应用基础Outlook.doc
- 你也许不知道的5个微信小技巧
热门文章
- MAC-VBox-Centos6.6安装增强功能
- 十进制与二进制,八进制,十六进制的转换
- HDSF主要节点解说(二)工作原理
- 线程执行android的looper,handler消息小结
- 移植的7zip到Vxworks 取名vx7zip
- 安卓手机端口号怎么查看_微信小程序怎么查看手机便签待办事项?
- android获取该控件在屏幕,android获取屏幕宽高与获取控件宽高(三种方法)
- 40Linux组41Linux所有者42Linux所在组43Linux修改所有组
- oracle varchar2() 占几个字母,Oracle number date varchar2字段类型占用空间大小
- php 2010excel,PHPExcel在php5.2.10上的bug