Solution -「Hdu3037」Saving Beans
Prob.
给定 \(m\) 个相同球,\(n\) 个不同的盒子。
求在这 \(n\) 个盒子中放不超过 \(m\) 个球的方案数,并对 \(p\) 取模。
其中 \(1 \leq n, m \leq 10^9, 1 < p < 10^6\),且 \(p\) 为质数。
Sol.
考虑先大力写出原题对应的组合数的柿子。
那就先来看一个经典模型:求 \(x\) 个不同盒子中放 \(y\) 个球允许盒子空着的方案数。
我们可以运用插板法。总共 \(y - 1\) 个空位,插入 \(x - 1\) 块板,这是不允许空着的方案。
我们可以尝试再给它额外分配 \(x\) 个空位,只要插到了这些空位里,就相当于当前分出的盒子取空。故该模型的答案即为 \(\dbinom {x + y - 1} {x - 1}\)。
不难发现原题就是在这个模型上又套了一个求和,即 \(x\) 固定但 \(y\) 不定。那么原题的答案即为 \({\large \sum \limits_ {i = 0} ^{m}} \dbinom {i + n - 1} {n - 1}\)。
恒等变换一下,即 \({\large \sum \limits_ {i = 0} ^{m + n - 1}} \dbinom {i} {n - 1}\)。
再由利用变上项求和公式可得 \({\large \sum \limits_ {i = 0} ^{m + n - 1}} \dbinom {i} {n - 1} = \dbinom {m + n} {n}\)。
现在我们就将其化为了简洁的一个组合数的形式,瓶颈在于 \(m, n\) 过大。
关于大数组合数的取模不难想到 Lucas ((。
Code.
#include <cstdio>
typedef long long LL;
int Abs(int x) { return x < 0 ? -x : x; }
int Max(int x, int y) { return x > y ? x : y; }
int Min(int x, int y) { return x < y ? x : y; }
int read() {
int x = 0, k = 1;
char s = getchar();
while(s < '0' || s > '9') {
if(s == '-')
k = -1;
s = getchar();
}
while('0' <= s && s <= '9') {
x = (x << 3) + (x << 1) + (s ^ 48);
s = getchar();
}
return x * k;
}
void write(int x) {
if(x < 0) {
x = -x;
putchar('-');
}
if(x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
void print(int x, char s) {
write(x);
putchar(s);
}
const int MAXN = 1e5 + 5;
int fac[MAXN], inv[MAXN], mod;
int Quick_Pow(int a, int b) {
int res = 1;
while(b) {
if(b & 1)
res = (LL)res * a % mod;
a = (LL)a * a % mod;
b >>= 1;
}
return res;
}
int C(int n, int m) {
int res = 1;
for(int i = n - m + 1; i <= n; i++)
res = (LL)res * i % mod;
int down = 1;
for(int i = 2; i <= m; i++)
down = (LL)down * i % mod;
return (LL)res * Quick_Pow(down, mod - 2) % mod;
}
int Lucas(int n, int m) {
if(m < mod)
return C(n, m);
return (LL)Lucas(n / mod, m / mod) * C(n % mod, m % mod) % mod;
}
int main() {
int t = read();
while(t--) {
int n = read(), m = read();
mod = read();
print(Lucas(m + n, n), '\n');
}
return 0;
}
Solution -「Hdu3037」Saving Beans的更多相关文章
- Solution -「构造」专练
记录全思路过程和正解分析.全思路过程很 navie,不过很下饭不是嘛.会持续更新的(应该). 「CF1521E」Nastia and a Beautiful Matrix Thought. 要把所有数 ...
- Solution -「原创」Destiny
题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...
- Solution -「GLR-R2」教材运送
\(\mathcal{Description}\) Link. 给定一棵包含 \(n\) 个点,有点权和边权的树.设当前位置 \(s\)(初始时 \(s=1\)),每次在 \(n\) 个结点内 ...
- Solution -「WF2011」「BZOJ #3963」MachineWorks
\(\mathcal{Description}\) Link. 给定你初始拥有的钱数 \(C\) 以及 \(N\) 台机器的属性,第 \(i\) 台有属性 \((d_i,p_i,r_i,g_i ...
- Solution -「LOCAL」二进制的世界
\(\mathcal{Description}\) OurOJ. 给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...
- Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡
\(\mathcal{Description}\) link. 有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...
- Solution -「LOCAL」大括号树
\(\mathcal{Description}\) OurTeam & OurOJ. 给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...
- Solution -「ZJOI2012」「洛谷 P2597」灾难
\(\mathcal{Description}\) link. 给定一个捕食网络,对于每个物种,求其灭绝后有多少消费者失去所有食物来源.(一些名词与生物学的定义相同 w.) 原图结点数 \ ...
- Solution -「JSOI2008」「洛谷 P4208」最小生成树计数
\(\mathcal{Description}\) link. 给定带权简单无向图,求其最小生成树个数. 顶点数 \(n\le10^2\),边数 \(m\le10^3\),相同边权的边数不 ...
随机推荐
- 华硕主板安装Ubuntu双系统无法启动解决办法
问题描述: 在安装完Ubuntu后,开机后没有启动项可以选择,而是直接进入win10系统. 解决办法: 开机进入bios,选择 高级模式 (Advance model),进入 启动(boot)选项卡, ...
- Unity实现简单的对象池
一.简介 先说说为什么要使用对象池 在Unity游戏运行时,经常需要生成一些物体,例如子弹.敌人等.虽然Unity中有Instantiate()方法可以使用,但是在某些情况下并不高效.特别是对于那些需 ...
- form表单与CSS选择器和样式操作
form表单 """获取前端用户数据并发送给后端服务器""" <form action=""></fo ...
- 初学者都能懂得 Git 说明
初学者都能懂得 Git 说明 本文写于 2020 年 8 月 10 日 网上有很多非常优秀的 Git 教程,但是他们都是面向有一定基础的开发者的. 可是对于没什么基础的初学者甚至是偶尔操作代码的设计师 ...
- UML类图六种关系的总结
在UML类图中,常见的有以下几种关系: 泛化(Generalization):继承的关系,实线带三角形箭头,指向父类. 实现(Realization):实现的关系,虚线带三角形箭头,指向接口. 关联( ...
- Python的.gitignore模板
参考:https://github.com/github/gitignore Python的.gitignore模板,记录一下方便查询 # Byte-compiled / optimized / DL ...
- 561. Array Partition I - LeetCode
Question 561. Array Partition I Solution 题目大意是,给的数组大小是2n,把数组分成n组,每组2个元素,每个组取最小值,这样就能得到n个值,怎样分组才能使这n个 ...
- mysqldump还原备份数据时遇到一个问题
问题描述 ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = O ...
- 迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅
通过在互联网上收集及微软官方网站等途径获取相关资料进行整理汇总出Microsoft SQL Server各个版本(SQL Server 2008 R2.SQL Server 2012.SQL Serv ...
- Charles如何抓取https请求-移动端+PC端
Charles安装完成,默认只能抓取到http请求,如果查看https请求,会显示unkonw或其它之类的响应.所以需要先进行一些配置,才能抓取到完整的https请求信息.下面针对PC端和手机端抓包的 ...