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的更多相关文章

  1. Solution -「构造」专练

    记录全思路过程和正解分析.全思路过程很 navie,不过很下饭不是嘛.会持续更新的(应该). 「CF1521E」Nastia and a Beautiful Matrix Thought. 要把所有数 ...

  2. Solution -「原创」Destiny

    题目背景 题目背景与题目描述无关.签到愉快. 「冷」 他半靠在床沿,一缕感伤在透亮的眼眸间荡漾. 冷见惆怅而四散逃去.经历嘈杂喧嚣,感官早已麻木.冷又见空洞而乘隙而入.从里向外,这不是感官的范畴. 他 ...

  3. Solution -「GLR-R2」教材运送

    \(\mathcal{Description}\)   Link.   给定一棵包含 \(n\) 个点,有点权和边权的树.设当前位置 \(s\)(初始时 \(s=1\)),每次在 \(n\) 个结点内 ...

  4. Solution -「WF2011」「BZOJ #3963」MachineWorks

    \(\mathcal{Description}\)   Link.   给定你初始拥有的钱数 \(C\) 以及 \(N\) 台机器的属性,第 \(i\) 台有属性 \((d_i,p_i,r_i,g_i ...

  5. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...

  6. Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡

    \(\mathcal{Description}\)   link.   有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...

  7. Solution -「LOCAL」大括号树

    \(\mathcal{Description}\)   OurTeam & OurOJ.   给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...

  8. Solution -「ZJOI2012」「洛谷 P2597」灾难

    \(\mathcal{Description}\)   link.   给定一个捕食网络,对于每个物种,求其灭绝后有多少消费者失去所有食物来源.(一些名词与生物学的定义相同 w.)   原图结点数 \ ...

  9. Solution -「JSOI2008」「洛谷 P4208」最小生成树计数

    \(\mathcal{Description}\)   link.   给定带权简单无向图,求其最小生成树个数.   顶点数 \(n\le10^2\),边数 \(m\le10^3\),相同边权的边数不 ...

随机推荐

  1. [题解] [LOJ2743]「JOI Open 2016」摩天大楼

    题目大意 将 \(N\) 个互不相同的整数 \(A_1 , A_2 , ⋯ , A_N\) 任意排列成 \(B_1 , B_2 , ⋯ , B_N\) . 要求 \(∑^{N−1}_{i=1} |B_ ...

  2. 关于background-*的一些属性

    1.盒模型 盒模型从外到内一次为:margin-box.border-box.padding-box.content-box. 2.一些属性设置的相对位置 ⑴background-position的属 ...

  3. 精华!一张图进阶 RocketMQ

    前 言 大家好,我是三此君,一个在自我救赎之路上的非典型程序员. "一张图"系列旨在通过"一张图"系统性的解析一个板块的知识点: 三此君向来不喜欢零零散散的知识 ...

  4. js通用对象数组冒泡排序

    数组对象通用 function sort(data, sortFiled, orderby) { var result = data, temp; for (var i = 0; i < res ...

  5. Dockerfile指令与Docker-compose容器编排-搭建docker私有仓库

    目录 一:部署应用映射外部目录(持久化) 总结 二:迁移与备份(容器保存为镜像) 1.django执行gitee,项目提交到远端 2.其他操作 3.操作步骤 4.容器保存为镜像 5.把镜像打包成压缩包 ...

  6. linux篇-linux下ffmpeg安装

    1最近自己搭建的公司服务端转化视频不可以,我想应该是ffmpeg的问题,头痛 准备这两个源码包 2安装,先解压 ffmpeg-4.1.4.tar.bz2 yasm-1.3.0.tar.gz 3先安装y ...

  7. .NET Core 读取配置技巧 - IOptions<TOptions> 接口

    原文链接:https://www.cnblogs.com/ysmc/p/16307804.html 在开发过程中,我们无法离开配置文件(appsetting.json),例如配置文件中有以下内容: { ...

  8. syc-day2

    第1题:mod注意负数. 第2题:dp 第3题:构造(奇偶性) 第4题:线段树

  9. 2006NOIP普及组:明明的随机数

    明明的随机数 时间限制:1000ms        内存限制:65536KB 题目描述: 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数 ...

  10. Docker容器手动安装mysql(国内镜像)

    Docker手动安装mysql 1.创建centos镜像的容器 [root@localhost Tools]# docker run -i -d -h zabbix --name zabbix -p ...