[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}^kC_n^i\)
当\(k\le p,n\le p\),预处理\(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}^{b})+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}^{b}\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\)预处理过了,\(C_{n/p}^{k/p}\)直接lucas定理,\(f(n\ mod\ p,k\ mod\ p)\)也预处理过了。
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;
}
转载于:https://www.cnblogs.com/xryjr233/p/BZOJ4591.html
[2019.2.24]BZOJ4591 [Shoi2015]超能粒子炮·改相关推荐
- [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)
大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算. 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积. 数位DP,f[i][0/1]表示从高到低第i位,这 ...
- 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}\ ...
- loj2038「SHOI2015」超能粒子炮・改(卢卡斯的理解和延伸+数位dp)
我们发现暴力+裸的卢卡斯可以骗到50分 所以就应该朝卢卡斯的方向去想. 卢卡斯是把n,k拆成两个p进制数进行统计的. 注意到如果在某一位ai>nia_i>n_iai>ni,a表示 ...
- P4345-[SHOI2015]超能粒子炮·改【Lucas定理,类欧】
正题 题目链接:https://www.luogu.com.cn/problem/P4345 题目大意 TTT组询问,给出n,kn,kn,k求 ∑i=0k(ni)\sum_{i=0}^{k}\bino ...
- 超能粒子炮·改 HYSBZ - 4591
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4591 就是求: C(n,0)+C(n,1)+... ...
最新文章
- 替换不文明词语和非法字符
- LeetCode实战:二叉树中的最大路径和
- 【Python基础】Python正则表达式入门到入魔
- [Buzz.Today]2013.03.14
- 关于Early-Z Culling(提前Z拣选)
- php中join用法,PHP join()函数用法与实例讲解
- java 画金刚石_帮忙改错!java 画金刚石
- python range函数怎么表示无限_python range函数怎么用
- 想让自己的网站变得精致吗?那就进来看看吧:跟随鼠标的天使
- APE代码解读系列(四)
- 超级P2P搜索引擎使用教程和下载地址
- 华为云服务器测试并用docker快速搭建2048网站
- MVP实现Recy多条目展示
- matlab怎么求标准化特征向量,matlab特征向量标准化
- 法国学术会议申根签证办理(因私)
- 卡罗林斯卡医学院计算机方向,卡罗林斯卡医学院:全球卫生专业受学生欢迎
- NAS 网络错误0x8007003B的解决方案
- 【东大自控笔记1】闭环控制系统及传递函数求解
- MySql 5.7 详细参数说明
- 动词ing基本用法_动词ing形式的用法及练习题(归纳整理,含答案).ppt
热门文章
- golang中的strings.Compare
- Linux内核开发工作方向
- 1.STM32中对LED_GPIO_Config()函数的理解(自定义)之流水灯
- 常考数据结构与算法:最长公共子串
- 线程安全: 互斥锁和自旋锁(10种)
- Zabbix 自定义Item经常Not Supported解决
- 7_linux下PHP、Apache、Mysql服务的安装
- IT行业: 嵌入式工程师的进阶之路
- 拦截导弹(最长递增子序列)
- 田志刚:人跟人差距怎么那么大呢?