\(\mathcal{Description}\)

  Link.

  给定非负整数序列 \(\{a_n\}\),设 \(\{b_n\}\) 是一个非负整数序列且 \(\sum_{i=1}^nb_i\le m\),求

\[\sum_{\{b_n\}}\prod_{i=1}^n\binom{b_i}{a_i}\bmod(10^9+7)
\]

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

  1. Solution -「ARC 104E」Random LIS

    \(\mathcal{Description}\)   Link.   给定整数序列 \(\{a_n\}\),对于整数序列 \(\{b_n\}\),\(b_i\) 在 \([1,a_i]\) 中等概率 ...

  2. Solution -「ARC 101D」「AT4353」Robots and Exits

    \(\mathcal{Description}\)   Link.   有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...

  3. Solution -「ARC 124E」Pass to Next

    \(\mathcal{Description}\)   Link.   有 \(n\) 个人站成一个环,初始时第 \(i\) 个人手里有 \(a_i\) 个球.第 \(i\) 个人可以将自己手中任意数 ...

  4. Solution -「ARC 126E」Infinite Operations

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),定义一次操作为: 选择 \(a_i<a_j\),以及一个 \(x\in\mathbb R ...

  5. 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 ...

  6. Solution -「ARC 125F」Tree Degree Subset Sum

    \(\mathcal{Description}\)   Link.   给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...

  7. Solution -「ARC 125E」Snack

    \(\mathcal{Description}\)   Link.   把 \(n\) 种零食分给 \(m\) 个人,第 \(i\) 种零食有 \(a_i\) 个:第 \(i\) 个人得到同种零食数量 ...

  8. Solution -「ARC 058C」「AT 1975」Iroha and Haiku

    \(\mathcal{Description}\)   Link.   称一个正整数序列为"俳(pái)句",当且仅当序列中存在连续一段和为 \(x\),紧接着连续一段和为 \(y ...

  9. Solution -「ARC 101E」「AT 4352」Ribbons on Tree

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,其中 \(2|n\),你需要把这些点两两配对,并把每对点间的路径染色.求使得所有边被染色的方案数 ...

随机推荐

  1. day23 结构体

    (1).若有说明和定义: typedef int *integer: integer p,*q: 则下列叙述正确的是[C] (A).q是基类型位int的指针变量 (B).p是int型变量 (C).p是 ...

  2. JVM完整详解:内存分配+运行原理+回收算法+GC参数等

    不管是BAT面试,还是工作实践中的JVM调优以及参数设置,或者内存溢出检测等,都需要涉及到Java虚拟机的内存模型.内存分配,以及回收算法机制等,这些都是必考.必会技能. JVM内存模型 JVM内存模 ...

  3. GIL全局解释器锁、死锁现象、python多线程的用处、进程池与线程池理论

    昨日内容回顾 僵尸进程与孤儿进程 # 僵尸进程: 所有的进程在运行结束之后并不会立刻销毁(父进程需要获取该进程的资源) # 孤儿进程: 子进程正常运行 但是产生该子进程的父进程意外死亡 # 守护进程: ...

  4. 【Android】安卓四大组件之Activity(一)

    [Android]安卓四大组件之Activity(一) 前言 Activity是Android学习中的一个重要组件,想要对其进行系统的了解可以分为几块内容,这一大章节的内容是有关于activity之间 ...

  5. [Jetson Nano]Jetson Nano快速入门

    NVIDIAJetsonNano开发套件是适用于制造商,学习者和开发人员的小型AI计算机.相比Jetson其他系列的开发板,官方报价只要99美金,可谓是相当有性价比.本文如何是一个快速入门的教程,主要 ...

  6. 【C++】STL算法

    STL算法 标签:c++ 目录 STL算法 一.不变序列算法 1.熟悉的min(), max() 2.找最值还自己动手么?不了不了 3.熟悉的find()和新学会的count() 二.变值算法 1.f ...

  7. Cesium中级教程1 - 空间数据可视化(一)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 本教程将教读者如何使用Cesium的实体(Entity)API绘 ...

  8. Natasha 4.0 探索之路系列(三) 基本的动态编译

    Natasha 的设计 动态编译 Roslyn 为开发者提供了动态编译的接口, 允许我们以 C# 代码来编写 Emit 或 表达式树生成的程序集, 但是完成一个编译需要诸多步骤, 用户参与的操作也很多 ...

  9. kubernetes之node 宕机,pod驱离问题解决

    背景: 当node宕机时,希望该node节点上的pod能够快速疏散到其他节点,并提供服务.测试发现,要等待5分钟,上面的pod才会疏散. 网上介绍通过修改 /etc/kubernetes/manife ...

  10. Python打印JSON中中文的解决办法

    code #!/usr/bin/python # encoding=utf-8 import json data = [{"a": "中文"}] print j ...