bzoj 4591 超能粒子炮·改 - Lucas
Description
Input
Output
Sample Input
5 5
Sample Output
HINT
Source
给定$n, k$,求$\sum_{i = 0} ^{k}C_{n}^{i}$模2333的余数。
显然Lucas。
$\sum_{i = 0} ^{k}C_{n}^{i}\\ =\sum_{i = 0} ^ {k}C_{n \% p}^{i\% p}C_{\left \lfloor \frac{n}{p} \right \rfloor}^{\left \lfloor \frac{i}{p} \right \rfloor}\\ =\left (\sum_{i = 0}^{p}C_{n \% p}^{i\% p} \right )\left ( \sum_{i = 0}^{\left \lfloor \frac{k}{p} \right \rfloor - 1} C_{\left \lfloor \frac{n}{p} \right \rfloor} ^ {\left \lfloor \frac{i}{p} \right \rfloor} \right ) + C_{\left \lfloor \frac{n}{p} \right \rfloor}^{\left \lfloor \frac{k}{p} \right \rfloor}\left ( \sum_{i = 0}^{k \% p}C_{n \% p}^{i} \right )$
考虑中间的一步可以进行递归计算。又因为$p = 2333$,所以最后一个前缀和可以预处理。
会出现一个较大的组合数,可以直接用Lucas算。
其实它可先用Lucas预处理,这样可以少个log。
Code
/**
* bzoj
* Problem#4591
* Accepted
* Time: 4140ms
* Memory: 44008k
*/
#include <bits/stdc++.h>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean;
#define ll long long const int p = ; ll n, k; int pow2[p + ];
int C[p + ][p + ];
int sc[p + ][p + ]; inline void prepare() {
pow2[] = ;
for (int i = ; i < p; i++)
pow2[i] = (pow2[i - ] << ) % p; C[][] = ;
for (int i = ; i < p; i++) {
C[i][] = C[i][i] = ;
for (int j = ; j < i; j++)
C[i][j] = (C[i - ][j - ] + C[i - ][j]) % p;
} for (int i = ; i < p; i++) {
sc[i][] = ;
for (int j = ; j < p; j++)
sc[i][j] = (sc[i][j - ] + C[i][j]) % p;
}
} inline void init() {
scanf(Auto""Auto, &n, &k);
} int Lucas(ll n, ll k) {
if (!n && !k) return ;
return Lucas(n / p, k / p) * C[n % p][k % p] % p;
} int S(ll n, ll k) {
if (k < ) return ;
return (pow2[n % p] * S(n / p, k / p - ) + Lucas(n / p, k / p) * sc[n % p][k % p]) % p;
} inline void solve() {
printf("%d\n", S(n, k));
} int T;
int main() {
prepare();
scanf("%d", &T);
while (T--) {
init();
solve();
}
return ;
}
bzoj 4591 超能粒子炮·改 - Lucas的更多相关文章
- [BZOJ 4591] 超能粒子炮-改
Link: 传送门 Solution: 记录一下推$\sum_{i=0}^k C_n^i$的过程: 其实就是将相同的$i/p$合起来算,这样每个里面都是一个可以预处理的子问题 接下来递归下去算即可 T ...
- bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]
4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...
- 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理
题目描述 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...
- P4345 [SHOI2015]超能粒子炮·改 Lucas
\(\color{#0066ff}{ 题目描述 }\) 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒 ...
- [bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)
Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...
- Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP
传送门 模数小,还是个质数,Lucas没得跑 考虑Lucas的实质.设\(a = \sum\limits_{i=0}^5 a_i 2333^i\),\(b = \sum\limits_{i=0}^5 ...
- [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)
大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算. 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积. 数位DP,f[i][0/1]表示从高到低第i位,这 ...
- Bzoj 4591: [Shoi2015]超能粒子炮·改 数论,Lucas定理,排列组合
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 178 Solved: 70[Submit][Stat ...
- BZOJ 4591 【SHOI2015】 超能粒子炮·改
题目链接:超能粒子炮·改 这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了. 我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一 ...
随机推荐
- js中变量提升(一个是变量,一个是函数表达式都会存在变量提升,函数声明不存在)
一.变量提升 在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域.变量提升即将变量声明提升到它所在作用域的最开始的部分.上个简历的例子如: ...
- 收集:C# WinForm获取当前路径汇总
Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏 //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembly.Loc ...
- pytorch进行图像分类的流程,下一篇为实例源代码解析
一.预处理部分 1.拿到数据首先对数据进行分析 对数据的分布有一个大致的了解,可以用画图函数查看所有类的分布情况.可以采取删除不合理类的方法来提高准确率: 对图像进行分析,在自定义的图像增强的多种方式 ...
- 了解tomcat
tomcat:是一个轻量级的应用服务器,中小型公司使用,部署和发布项目,响应html bin:存放二进制文件,startup.bat:启动文件,shutdown.bat关闭文件 conf:server ...
- caffe配置文件
一.数据层及参数 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe. ...
- WebApi关于配置全局返回Json数据格式时间以及命名小写
1.直接在Global文件中配置: 1 var formatters = GlobalConfiguration.Configuration.Formatters; 2 var jsonFormatt ...
- oracle数据库数值类型
---恢复内容开始--- 内容摘自网络 Oracle的数值类型有int,number,float,decimal,numberic等. NUMBER类型 定义 定义格式NUMBER (prec ...
- linux安装flash player来播放视频
1下载64位flashplayer插件,可在此下载(偷偷赚俩金币,为省金币也可到官网去搜),得到flashplayer11_b2_install_lin_64_080811.tar.gz: http: ...
- Excel的导入导出功能
POI组件的详细介绍文档: https://www.cnblogs.com/huajiezh/p/5467821.html .xls 对应 HSSFWorkbook book=new HSSFWork ...
- linux打包压缩与搜索命令
1.tar命令 tar命令用于对文件进行打包压缩或解压,格式为“tar [选项] [文件]”. tar命令的参数及其作用 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些 ...