Solution -「ARC 110D」Binomial Coefficient is Fun
\(\mathcal{Description}\)
Link.
给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\le m\),求
\]
\(n,a_i\le2\times10^3\)。
\(\mathcal{Solution}\)
鉴于这是 ARC D,可以直观感受到是一个代码不长的组合意义题。(
考虑一个 \(\prod_{i=1}^n\binom{b_i}{a_i}\) 的意义:
有 \(m\) 个球排成一行,将其分成 \(n+1\) 段,第 \(i~(i\le n)\) 段长度 \(b_i\),再从这些段内选 \(a_i\) 个球。
那么对其求和,意义即为:
有 \(m\) 个球排成一行,将其任意分成 \(n+1\) 段,再从前 \(n\) 段内每段选 \(a_i\) 个球。
把“分段”当成球,所以:
有 \(m+n\) 个球排成一行,先选 \(a_1\) 个球,再选 \(1\) 个球,接着选 \(a_2\) 个球,再选 \(1\) 个球……
进一步:
有 \(m+n\) 个球排成一行,选 \(n+\sum_{i=1}^na_i\) 个球。
故答案为 \(\binom{n+m}{n+\sum_{i=1}^na_i}\)。复杂度 \(\mathcal O(\sum_{i=1}^na_i)\)。
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
#define rep( i, l, r ) for ( int i = l, rpbound##i = r; i <= rpbound##i; ++i )
#define per( i, r, l ) for ( int i = r, rpbound##i = l; i >= rpbound##i; --i )
const int MOD = 1e9 + 7, MAXN = 2e3;
int n, m, fac[MAXN + 5], inv[MAXN * MAXN + 5];
inline int mul ( const long long a, const int b ) { return a * b % MOD; }
inline void init ( const int n ) {
inv[1] = 1;
rep ( i, 2, n ) inv[i] = mul ( inv[MOD % i], MOD - MOD / i );
}
inline int comb ( const int n, const int m ) {
if ( n < m ) return 0;
int ret = 1;
for ( int i = 1; i <= m; ++i ) ret = mul ( ret, mul ( n - i + 1, inv[i] ) );
return ret;
}
int main () {
scanf ( "%d %d", &n, &m );
int s = 0;
for ( int i = 1, a; i <= n; ++i ) {
scanf ( "%d", &a );
s += a;
}
init ( s + n );
printf ( "%d\n", comb ( n + m, s + n ) );
return 0;
}
Solution -「ARC 110D」Binomial Coefficient is Fun的更多相关文章
- Solution -「ARC 104E」Random LIS
\(\mathcal{Description}\) Link. 给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Solution -「ARC 124E」Pass to Next
\(\mathcal{Description}\) Link. 有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...
- Solution -「ARC 126E」Infinite Operations
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...
- Solution -「ARC 126F」Affine Sort
\(\mathcal{Description}\) Link. 给定 \(\{x_n\}\),令 \[f(k)=\left|\{(a,b,c)\mid a,b\in[0,c),c\in[1,k ...
- Solution -「ARC 125F」Tree Degree Subset Sum
\(\mathcal{Description}\) Link. 给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...
- Solution -「ARC 125E」Snack
\(\mathcal{Description}\) Link. 把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...
- Solution -「ARC 058C」「AT 1975」Iroha and Haiku
\(\mathcal{Description}\) Link. 称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...
- Solution -「ARC 101E」「AT 4352」Ribbons on Tree
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...
随机推荐
- java 字符串 大小写转换 、去掉首末端空格 、根据索引切割字符 、判断是否含有某连续字符串
1. 字符串转大写: toUpperCase() 字符串转小写: toLowerCase() @Test public void tt(){ String d = "sdgGHJGjghGH ...
- LINUX学习-Mysql安装
一.安装环境 操作系统CentOS6.8 关闭SeLinux和iptables防火墙 二.网络yum源 将下面的软件下载到 /etc/yum.repos.d/ 的目录下 官方基础:http:// ...
- vuex获取数据
cmd窗口vue add vuex后出现store文件夹,在里面的index.js里面设置state属性,可以在视图页面home.vue文件中获取. 方法1: //在项目当中引入router以后 就多 ...
- [Eclipse插件] 编辑插件IndentGuide
IndentGuide插件 将可配置的缩进指导线添加到Eclipse文本编辑器 如下图
- 带你十天轻松搞定 Go 微服务系列(一)
本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建(本文) 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Au ...
- 配置vscode的C++环境Unexpected GDB output from command "-environment-cd
原因 中文字符 换成D盘目录下以后.
- golang中自定义实现0当做除数的错误异常处理接口
package main import "fmt" type ZeroDivisor struct { // 定义一个0当做除数的结构体 divisor int // 被除数 di ...
- 不难懂------适配移动端flexible
基于 vue-cli 配置手淘的 lib-flexible + rem,实现移动端自适应 安装 flexible npm install lib-flexible --save 引入 flexible ...
- Mongodb全备+增备+oplog恢复误删数据
此时测试表中有7条数据,做个全备. 全备: mongodump --host=192.168.43.43 --port=37017 --oplog --out=/opt/mongo/fullbacku ...
- 删除修改docker网络环境
安装工具包 yum install bridge-utils -y 设置docker0 ip网段 ip link set docker0 down brctl delbr docker0 brctl ...