[bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)
Description
Input
Output
Sample Input
Sample Output
Solution
易得,
原式=C(n/2333,0)∗C(nmod2333,0)+C(n/2333,0)∗C(nmod2333,1)+...+C(n/2333,k/2333)∗C(nmod2333,kmod2333) mod 2333
也就是将原式中的各个mod 2333项拆分成两项再总体mod 2333
所以对于这道题,我们先预处理出一个S(n,k)=∑C(n,i) (i∈[0,k]) (当然最后都是mod p意义下的),ans=S(n%2333,2332)*(∑C(n/2333,j)) (j∈[0,k1)) + C(n/2333,k1)*S(n%2333,k%2333)
ans中的S()一定可以用二维的东西在规定时空内求出,而∑C(n/2333,j)就是我们超能粒子炮`改的子问题,递归求解即可,另,C(n/2333,k1)也可以用lucas定理递归来解
于是这道题就口头ac了。
00:30完成!
#include <stdio.h>
#include <string.h>
#define md 2333
#define LL long long
inline LL Rin() {
LL x=,c=getchar();
for(;c<||c>;c=getchar());
for(;c>&&c<;c=getchar())
x=x*+c-(LL);
return x; }
inline LL mod(LL x) {
return x-(x/md)*md; }
LL frac[md+],c[md+][md+],s[md+][md+];
void calc() {
frac[]=1LL;
for(int i=;i<=md;i++)
frac[i]=mod(frac[i-]*(LL)i);
c[][]=1LL;
for(int i=;i<=md;i++) {
c[i][]=c[i][i]=1LL;
for(int j=;j<i;j++)
c[i][j]=mod(c[i-][j-]+c[i-][j]); }
for(int i=;i<=md;i++) {
s[i][]=1LL;
for(int j=;j<=md;j++)
s[i][j]=mod(s[i][j-]+c[i][j]); } }
LL lucas(LL n,LL k) {
return k!=0LL?mod(c[n%md][k%md]*lucas(n/md,k/md)):1LL; }
LL getans(LL n,LL k) {
return k<0LL?0LL:mod(mod(s[mod(n)][md-]*getans(n/md,k/md-))+mod(lucas(n/md,k/md)*s[mod(n)][mod(k)])); }
int main() {
calc();
LL n,k,T=Rin();
while(T--)
n=Rin(),k=Rin(),printf("%lld\n",getans(n,k));
return ; }
[bzoj4591][Shoi2015][超能粒子炮·改] (lucas定理+组合计数)的更多相关文章
- [BZOJ4591][SHOI2015]超能粒子炮·改(Lucas定理+数位DP)
大组合数取模可以想到Lucas,考虑Lucas的意义,实际上是把数看成P进制计算. 于是问题变成求1~k的所有2333进制数上每一位数的组合数之积. 数位DP,f[i][0/1]表示从高到低第i位,这 ...
- 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又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威力上有了本质的提 ...
- BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理
BZOJ_4591_[Shoi2015]超能粒子炮·改_Lucas定理 Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以 ...
- bzoj4591 [Shoi2015]超能粒子炮·改
Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...
- P4345 [SHOI2015]超能粒子炮·改 Lucas
\(\color{#0066ff}{ 题目描述 }\) 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒 ...
- BZOJ4591——[Shoi2015]超能粒子炮·改
1.题意:求 2.分析:公式恐惧症的同学不要跑啊QAQ 根据lucas定理-- 这一步大家都能懂吧,这是浅而易见的lucas定理转化过程,将每一项拆分成两项 那么下一步,我们将同类项合并 我们观察可以 ...
- Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP
传送门 模数小,还是个质数,Lucas没得跑 考虑Lucas的实质.设\(a = \sum\limits_{i=0}^5 a_i 2333^i\),\(b = \sum\limits_{i=0}^5 ...
- bzoj千题计划279:bzoj4591: [Shoi2015]超能粒子炮·改
http://www.lydsy.com/JudgeOnline/problem.php?id=4591 最后的式子合并同类项 #include<cstdio> #include<i ...
随机推荐
- JAVA接口和抽象类的特点
接口的特点: 1:接口不可实例化,可结合多态进行使用(接口 对象=new 对象()) 2:接口里的成员属性全部是以 public(公开).static(静态).final(最终) 修饰符修饰 3:接口 ...
- E20180127-hm
retain vt. 保持; 留在心中,记住; 雇用; 付定金保留;
- bzoj 1592: [Usaco2008 Feb]Making the Grade 路面修整【dp】
因为是单调不降或单调不升,所以所有的bi如果都是ai中出现过的一定不会变差 以递增为例,设f[i][j]为第j段选第i大的高度,预处理出s[i][j]表示选第i大的时,前j个 a与第i大的值的差的绝对 ...
- 如何在Ubuntu上安装Wine 2.6
Wine(Wine不是模拟器)是一种开源兼容层软件应用程序,可以让Linux和Unix用户通过Winelib软件库在他们的系统上运行Windows软件. sudo add-apt-repository ...
- 257 Binary Tree Paths 二叉树的所有路径
给定一个二叉树,返回从根节点到叶节点的所有路径.例如,给定以下二叉树: 1 / \2 3 \ 5所有根到叶路径是:["1->2->5", " ...
- Hadoop Hive概念学习系列之HiveQL编译基础(十)
由客户端提交的HiveQL语句将最终被转换为一个或多个MapReduce任务并提交由Hadoop执行.不包含聚合和连接的简单SELECT语句可以使用一个单独的只包含Map阶段的任务实现.使用GROUP ...
- lua调用java java调用lua[转载]
转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方 ...
- Ceph在手,天下我有
有人问我,你是如何做到统一存储的?我微微一笑,大声告诉他:Ceph在手,天下我有. Ceph是一个统一的分布式存储系统,旨在实现出色的性能,可靠性和可扩展性.认了OpenStack做大哥之后更是一发不 ...
- 浅谈.net remoting 与 webservice
1. .NET Remoting .NET Remoting是微软随.NET推出的一种分布式应用解决方案,被誉为管理应用程序域之间的 RPC 的首选技,它允许不同应用程序域之间进行通信(这里的通信可以 ...
- thinkphp信息修改和分页
关联两个数据表,在Model里建立StuModel.class.php: <?php //Belongs_to 关联表示当前模型从属于另外一个父对象 namespace Admin\Model; ...