题意:

曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加
强大的粒子流的神秘装置。超能粒子炮·改相比超能粒子炮,在威力上有了本质的提升。它有三个参数n,k。它会
向编号为0到k的位置发射威力为C(n,k) mod 2333的粒子流。现在SHTSC给出了他的超能粒子炮·改的参数,让你求
其发射的粒子流的威力之和模2333。
n,k<=10^18
cas<=10^5
 
思路:WYZ作业
应该是一道在草稿纸上就能完成大半部分的题
设S(n,k)=Σ C(n,i) i=0..k
先运用Lucas定理将C(n,m)表示为C(n div mo,m div mo)*C(n mod mo,m mod mo)
将其一项一项写出我们可以发现,i=0..p-1可以分成一组,p..2p-1可以分成一组……一共可以分成k div mo-1组,每一组都有一些重复的部分
这些整组的和整理后为S(n div mo,k div mo-1)*S(n mod mo,mo-1)
还有最后若干无法凑成整组的项,可以发现他们的系数都是C(n div mo,k div mo)
这些项的和为C(n div mo,k div mo)*S(n mod mo,k mod mo)
两部分加起来就是S(n,k)
 const mo=;
var s,c:array[..mo,..mo]of int64;
cas,i,j,v:longint;
n,k:int64; function ask(n,k:int64):int64;
var a,b:int64;
begin
if (n<k)or(k<) then exit();
if n<mo then exit(c[n,k]);
a:=n div mo; b:=k div mo;
exit(ask(a,b)*c[n mod mo,k mod mo] mod mo);
end; function clac(n,k:int64):int64;
var a,b:int64;
begin
if k< then exit();
a:=n div mo; b:=k div mo;
exit((clac(a,b-)*s[n mod mo,mo-]
+ask(a,b)*s[n mod mo,k mod mo]) mod mo);
end; begin
assign(input,'bzoj4591.in'); reset(input);
assign(output,'bzoj4591.out'); rewrite(output);
c[,]:=;
c[,]:=; c[,]:=;
for i:= to mo do
begin
c[i,]:=;
for j:= to i do c[i,j]:=(c[i-,j-]+c[i-,j]) mod mo;
end;
for i:= to mo- do
begin
s[i,]:=;
for j:= to mo- do s[i,j]:=(s[i,j-]+c[i,j]) mod mo;
end;
read(cas);
for v:=1 to cas do
begin
read(n,k);
writeln(clac(n,k));
end;
close(input);
close(output);
end.
 

【BZOJ4591】超能粒子炮·改(Lucas定理,组合计数)的更多相关文章

  1. [bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

  2. 【bzoj4591】[Shoi2015]超能粒子炮·改 Lucas定理

    题目描述 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...

  3. bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]

    4591: [Shoi2015]超能粒子炮·改 题意:多组询问,求 \[ S(n, k) = \sum_{i=0}^n \binom{n}{i} \mod 2333,\ k \le n \le 10^ ...

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

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

  5. BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理

    BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理 Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以 ...

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

    \(\color{#0066ff}{ 题目描述 }\) 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒 ...

  7. bzoj 4591 超能粒子炮·改 - Lucas

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

  8. Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP

    传送门 模数小,还是个质数,Lucas没得跑 考虑Lucas的实质.设\(a = \sum\limits_{i=0}^5 a_i 2333^i\),\(b = \sum\limits_{i=0}^5 ...

  9. 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理

    4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 95  Solved: 33[Submit][Statu ...

随机推荐

  1. sdut2784&cf 126b Good Luck!(next数组)

    链接 next数组的巧妙应用  学弟出给学弟的学弟的题.. 求最长的 是前缀也是后缀同时也是中缀的串  next的数组求的就是最长的前后缀 但是却不能求得中缀 所以这里 就把尾部去掉之后再求 这样就可 ...

  2. IIS7 网站发布

    选择“网站” 添加网站

  3. jquery 实现 点击把数据移动右侧 点击再次移回到左侧

    2018年第一发  希望新的一年和大家一下学习更多知识    JS://把数据左边挪到了右边,再从右边移动回来function moveOption(e1, e2){   $("#" ...

  4. R in action读书笔记(10)-第八章:回归-- 异常观测值 改进措施

    8.4 异常观测值 8.4.1 离群点 car包也提供了一种离群点的统计检验方法.outlierTest()函数可以求得最大标准化残差绝对值Bonferroni调整后的p值: > library ...

  5. 源代码管理SVN的使用

    SVN 全称是Subversion,集中式版本控制之王者 SVN 版本控制,需要自己搭建一个管理代码的服务器,提供开发人员,上传和下载 1.基本介绍 使用环境 要想利用SVN管理源代码,必须得有2套环 ...

  6. Node.js——fs常用API

    文件状态 文件删除 文件信息 读取文件夹 文件的截取 创建文件夹 删除目录 文件监视,可以设置监视频率 文件重命名,可以用来剪切文件 注意 fs.open() fs.close() 这是最原始的读写方 ...

  7. 从Code::Blocks到Dev–C++,Dev-C++安装调试一条龙

    关于单文件调试 Codeblocks只支持单文件编译,不支持单文件调试,只有整个工程才能调试,还有路径名里不能有中文和空格,很坑的!就因为这个弃用了. 去你的吧! 老子用别的了 谁支持单文件编译和调试 ...

  8. 360浏览器 收藏夹 ico 缓存 目录

    C:\Users\Administrator\AppData\Roaming\360se6\apps\data\users\default\data\ico

  9. CAD使用GetxDataString读数据(com接口)

    主要用到函数说明: MxDrawEntity::GetxDataString2 读取一个字符扩展数据,详细说明如下: 参数 说明 [in] LONG lItem 该值所在位置 [out, retval ...

  10. js中5中继承方式分析

    //1.借用式继承   把sup的构造函数里的属性方法克隆一份sub实例对象     function Super(){       this.val = 1;       this.fun1 = f ...