HDU3037 Saving Beans Lucas 定理+逆元

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

HDU3037 Saving Beans

题目相当于求n个数的和不超过m的方案数。

如果和恰好等于m,那么就等价于方程x1+x2+...+xn = m的解的个数,利用插板法可以得到方案数为:

(m+1)x(m+2)...(m+n-1)  = C(m+n-1,n-1) = C(m+n-1,m)

现在就需要求不大于m的,相当于对i = 0,1...,m对C(n+i-1,i)求和,根据公式C(n,k) = C(n-1,k)+C(n-1,k-1)得

C(n-1,0)+C(n,1)+...+C(n+m-1,m)

= C(n,0)+C(n,1)+C(n+1,2)+...+C(n+m-1,m)

= C(n+m,m)

现在就是要求C(n+m,m) % p,其中p是素数。

然后利用Lucas定理的模板就可以轻松的求得C(n+m,m) % p的值

#include<bits/stdc++.h>
using namespace std;
const int MAX=1e5+1;
long long n,m,MOD;
long long fact[MAX];
inline long long inv_(long long a)
{
    if(a==1) return 1;
    return inv_(MOD%a)*(MOD-MOD/a)%MOD;
}
inline void init()
{
    fact[0]=1;
    for(int i=1;i<=MOD;i++) fact[i]=(fact[i-1]*i)%MOD;
}
inline long long C(long long a,long long b)
{
    if(b>a) return 0;
    return fact[a]*inv_(fact[a-b]*fact[b]%MOD)%MOD;
}
inline long long lucas(long long a,long long b)
{
    if(a<MOD&&b<MOD) return C(a,b);
    return lucas(a/MOD,b/MOD)*C(a%MOD,b%MOD)%MOD;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%I64d%I64d%I64d",&n,&m,&MOD);
        init();
        printf("%I64d\n",lucas(n+m,m));
    }
    return 0;
}

 

基于Spark Streaming的实时数据处理系统:从Lambda架构到新闻热榜实战 实时数据处理是应对海量数据即时分析需求的核心技术,其原理在于将连续产生的数据流进行微批次或逐事件处理,而非传统批处理的离线计算模式。这项技术的价值在于能够实现业务指标的秒级监控与决策支持,广泛应用于实时监控、风险控制、个性化推荐等场景。本文聚焦于构建一个新闻网实时分析系统,通过整合Spark Streaming、Kafka、Flume和Redis等组件,详细阐述了如何实现实时热门新闻排行、用户地域分布统计等关键功能。文中深入探讨了状态管理、偏移量处理等工程实践要点,并提供了针对数据倾斜、状态恢复等典型问题的 阅读详情

相关推荐

基于CANoe的车载以太网测试

以太网测试 CANoe

Yafet 4500

HDU3037Saving Beans

题目:Saving Beans 题意:不超过n个球放入m个盒子方案数,盒子可以为空 解析:        Lucas。        通过隔板法,推出式子后可以在前面加一项递推到最后答案为。   代码: #include &lt;bits/stdc++.h&gt; #define int long long using namespace std; const int Max=1...

ETO的博客 348

微信小程序 - 下单账号和支付账号不一致,请核实后再支付(微信小程序或微信H5页面/微信公众号网页支付时报错:“下单账号和支付账号不一致,请核实后再支付”,买家微信支付时提示错误)详细排查和解决方案!

微信支付出现 “下单账号与支付账号不一致,请核实后再支付”微信小程序下单账号与支付账号不一致不让支付,微信公众号网页 微信H5页面JS-SDK支付时出现错误:下单账号和支付账号不一致,请核实后再支付,openId导致的微信中“下单账号和支付账号不一致”原因及解决办法,调用统一下单所传openId与实际支付用户的openId不一致,微信支付jssdk报错,检查了没有不一致依然报错怎么办,微信支付下单账号和支付账号不一致,请核实后再支付,微信支付功能用JSAPI支付,H5页面负责下单并支付jsapi,微信调起支

🏆 前端领域优质创作者 5278

hdu 3037 Saving Beans 【大组合数取模-Lucas定理+逆元取模】

Lucas定理 A、B是非负整数,p是质数。A B写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])  mod p同余 即:Lucas(n,m,p)=C(n%p,m%p)*Lucas(n/p,m/p,p)

智障 2526

HDU 3037 Saving Beans (隔板法 Lucas定理 费马小定理 乘法逆元)

Saving Beans Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7780    Accepted Submission(s): 3135   Problem Description Although winter is f...

Tc的专栏 649

HDU3037 Saving BeansLucas定理+乘法逆元

题目大概问小于等于m个的物品放到n个地方有几种方法。 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m。 这个方程的非负整数解个数是个经典问题,可以+1转化正整数解的个数用插板法解决:$C_{y+n-1}^{n-1}=C_{y+n-1}^y$。 而0<=y<=m,最后的结果就是—— $$\sum_{i=0}...

weixin_30482181的博客 72

HDU 3037 Saving Beans (组合+Lucas定理+逆元+快速幂)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理 A、B是非负整数,p是质数。A B写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])

lamborghini1993 1201

hdu3037--Saving Beans --【lucas定理+逆元+插板法】

                                              Saving Beans                         Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)                                 ...

wzw 365

五月の诈尸笔记

最近状态超差。省赛惶恐。 强行插队的后果就是主刀沉迷考研副刀沉迷英语辅助沉迷力学。 趁着马上到来的公费旅游调养一下生息。然而马上要考试了。 5.7 xdu 1158Orz Fatality 不是很懂数学。 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; ...

weixin_30332705的博客 105

[HDU3037] Saving Beans Lucas定理

传送门Problem DescriptionAlthough winter is far away, squirrels have to work day and night to save beans. They need plenty of food to get through those long cold days. After some time the squirrel family...

LvYanchang的博客 332

HDU 3037 隔板法 + Lucas 定理

题意 传送门 HDU 3037 Saving Beans 题解 求将不超过 MMM 的物品划分至 NNN 个盒子,可以有盒子为空的方案数。设取 kkk 个物品,应用隔板法,那么方案为 Ck+N−1N−1C_{k+N-1}^{N-1}Ck+N−1N−1​。添加一个盒子,编号为 N+1N+1N+1,那么这个盒子分到 kkk 个物品时的方案数,都对应了 NNN 个盒子分到 M−kM-kM−k 个物品的方案数。那么答案为 CN+MMC_{N+M}^{M}CN+MM​。预处理阶乘,为了保证计算中存在逆元,应用 Luc

neweryyy的博客 197

Saving Beans HDU - 3037(题解)

原题 http://acm.hdu.edu.cn/showproblem.php?pid=3037 题目大意 题目要求把i颗豆(0<=i<=m)放进n个洞里有多少种情况. 题目分析 这道题可以看作是在m颗豆里面按顺序插入n+1个板,就是把这m颗豆分成n+1堆,其中n堆是要放入洞中的,还有1堆是不放进洞中的.这时候情况有(m+1)(m+2)...(m+n+1),又因为这些板...

weixin_30338497的博客 134

HDU 3037 Saving BeansLucas定理

组合数取模 Lucas定理入门

Ab.Ever 354

hdu 3037 Saving Beanslucas定理模板)

题意: 求在n棵树上摘不超过m颗豆子的方案,结果对p取模。 解析: 题目可以转换成 x1+x2+……+xn=mx_1+x_2+……+x_n=m 有多少组解,m在题中可以取0~m。 利用插板法可以得出 x1+x2+……+xn=mx_1+x_2+……+x_n=m 解的个数为Cn−1n+m−1=Cmn+m−1C_{n+m-1}^{n-1}=C_{n+m-1}^m; 则题

小G的ACM之路 1525

HDU 3037Saving Beans Lucas定理模板

http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板。 现在才写,noip滚粗前兆QAQ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int ...

as2886089的博客 141

hdu 3037 Saving Beans Lucas定理

题意:将不超过m颗豆子存储在n颗不同的树上,求种类数结果模p,输入的p一定是质数。 用隔板法求种类数:http://blog.sina.com.cn/s/blog_7cc6f2770100red3.html 题解:http://m.blog.csdn.net/discreeter/article/details/70244319 费马小定理逆元:http://blog.csdn.net/c

chen_minghui的博客 289

hdu3037Saving Beans lucas定理

hdu3037 lucas 对组合数取模 lucas(n,m)=C(n%mod,m%mod)*lucas(n/mod,m/mod)%mod; lucas(n,0)=1; #include #include using namespace std; __int64 jc[100010]; __int64 exgcd(__int64 a,__int64 b,__int64

Time flies 1217

hdu 3037——Saving Beans

Saving Beans Time Limit: 6000/3000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8258Accepted Submission(s): 3302 Problem Description Although winter ...

aochuiliu8050的博客 168

HDU 3037 Saving Beans

2016暑期集训2-KHDU 3037 Saving Beans组合数性质,Lucas定理 传送门:HustOJ 传送门:HDU 题意给了n,m,p。把不超过m个相同的松子放入n个不同的树洞,有多少种方法,模p。思路题目相当于求n个数的和不超过m的方案数,即把小于等于m个物品分成n堆。 如果和恰好等于m,那么就等价于方程x1+x2++xn = m的解的个数,利用插板法可以得到方案数

P.H.S 315

HDU - 3037 Saving Beans lucas定理

题目:给出n,m,p,求C(n+m,m)然后对p取模 p 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include #include #include #include #include

ACVevtor的博客 347

【日常学习】【组合数取模Lucas定理HDU3037 Saving Beans题解

【提前声明:此题没有通过!WA!有待进一步研究修改。放在这里只是起一个例子的作用,其实这道题鄙人并没有真正掌握= =】、 【本文努力抄袭模仿了小花妹妹的博文0戳我0)】 题目大意:共T个测试点,每个测试点中,给定n、m,求将不超过m个种子放入n个坑的方案总数,最后答案对质数p取模。(一共m个,每个坑放多少无所谓,最后没放完m个也无所谓) 数据范围:1 思路

西家家 882
上一篇: HDU6386 Age of Moyu BFS+优先队列
下一篇: 组合数取模专题/质因分解
qianyri
博客等级 码龄9年 7粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值