Codeforces Round #309 (Div. 1)

A. Kyoya and Colored Balls
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Kyoya Ootori has a bag with n colored balls that are colored with k different colors. The colors are labeled from 1 to k. Balls of the same color are indistinguishable. He draws balls from the bag one by one until the bag is empty. He noticed that he drew the last ball of color ibefore drawing the last ball of color i + 1 for all i from 1 to k - 1. Now he wonders how many different ways this can happen.

Input

The first line of input will have one integer k (1 ≤ k ≤ 1000) the number of colors.

Then, k lines will follow. The i-th line will contain ci, the number of balls of the i-th color (1 ≤ ci ≤ 1000).

The total number of balls doesn't exceed 1000.

Output

A single integer, the number of ways that Kyoya can draw the balls from the bag as described in the statement, modulo 1 000 000 007.

Examples
input
3
2
2
1
output
3
input
4
1
2
3
4
output
1680
Note

In the first sample, we have 2 balls of color 1, 2 balls of color 2, and 1 ball of color 3. The three ways for Kyoya are:

1 2 1 2 3
1 1 2 2 3
2 1 1 2 3

解题报告:

1、可以从后往前思考,先把第n种颜色的,最后一个球放到最后,然后将这个颜色的其余的球随便放,然后将第(n-1)种颜色的球放到,之前放的球的最前一个的前面,递推下去。

2、递推公式:

for(int i=n;i>=;i--)
{
if(cnt[i]==) continue;
ans=(ans*C[c-][cnt[i]-])% mod;
c-=cnt[i];
}

3、组合数递推公式:

void init()
{
memset(C, , sizeof(C));
C[][] = ;
C[][] = C[][] = ;
for(int i = ; i <= ; ++i)
{
C[i][] = C[i][i] = ;
for(int j = ; j < i; ++j)
{
C[i][j] = (C[i-][j-] + C[i-][j]) % mod;
}
}
}
#include <bits/stdc++.h>

using namespace std;
typedef long long ll; const int maxn = ;
const ll mod = ;
ll C[maxn][maxn]; void init()
{
memset(C, , sizeof(C));
C[][] = ;
C[][] = C[][] = ;
for(int i = ; i <= ; ++i)
{
C[i][] = C[i][i] = ;
for(int j = ; j < i; ++j)
{
C[i][j] = (C[i-][j-] + C[i-][j]) % mod;
}
}
} int cnt[maxn]; int main()
{ init();
int n;
int c = ;
ll ans = ;
scanf("%d", &n);
for(int i = ; i <= n; i++)
{
scanf("%d", &cnt[i]);
c += cnt[i];
} for(int i = n; i >= ; i--)
{
if(cnt[i] == ) continue;
ans = (ans * C[c-][cnt[i]-]) % mod;
c -= cnt[i];
} cout << ans << endl; return ;
}

A. Kyoya and Colored Balls_排列组合,组合数的更多相关文章

  1. Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls 排列组合

    C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...

  2. 排列组合+组合数取模 HDU 5894

    // 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...

  3. 554C - Kyoya and Colored Balls

    554C - Kyoya and Colored Balls 思路:组合数,用乘法逆元求. 代码: #include<bits/stdc++.h> using namespace std; ...

  4. Codeforces A. Kyoya and Colored Balls(分步组合)

    题目描述: Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  5. Kyoya and Colored Balls(组合数)

    Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. Codeforces554 C Kyoya and Colored Balls

    C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...

  7. HDU 1521 排列组合 指数型母函数

    排列组合 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status D ...

  8. UVaLive 7360 Run Step (排列组合,枚举)

    题意:给定一个数 n ,表示一共有 n 步,然后你可以迈一步也可以迈两步,但是左腿和右腿的一步和两步数要一样,并且两步数不小于一步数,问你有多少种方式. 析:虽然是排列组合,但还是不会做.....水啊 ...

  9. 【CF521C】【排列组合】Pluses everywhere

    Vasya is sitting on an extremely boring math class. To have fun, he took a piece of paper and wrote ...

随机推荐

  1. beleline hive spark-shell帮助

    -- beeline帮助 : jdbc:hive2://100.69.216.40:10001> !help !addlocaldriverjar Add driver jar file in ...

  2. my07_lock-tables与single-transaction的区别

    概念描述 ************************************************************ mysqldump进行逻辑备份时(innodb),为保证事务的一致性 ...

  3. 几种经过整理的文件上传压缩和前台js压缩的方法

    /** * 图片压缩上传 * @param $im,图片资源 * @param int $maxwidth,最大宽度,超过这个宽度则进行压缩 * @param int $maxheight,最大高度, ...

  4. java——cmd命令编译带包名的源程序

    .java文件的绝对路径:C:\eclipse-workspace\test_01\src\test\try.java try.java的包名为:package test; 在cmd中 cd C:\e ...

  5. team foundation server 工具的使用

    1.打开TFS工具点击创建集合,填写集合名称,下一步,按照步骤一步一步的往下操作. 2.创建完集合以后,打开VS工具,如下图,在主页上左键选择新建团队项目. 3.选择团队项目,然后选择新建的项目集合和 ...

  6. speex编译

    首先去官网 https://www.speex.org/downloads/ 下载解压 将include.libspeex文件夹复制到自己新建工程的jni目录下 speex有关的类 package c ...

  7. 2019.03.19 读书笔记 string与stringbuilder的性能

    1 string与stringbuilder 并不是stringbuilder任何时候都在性能上占优势,在少量(大约个位数)的字符串时,并不比普通string操作快. string慢的原因不是stri ...

  8. sql server 2017安装

    下载: 1. 2. 3. 安装步骤: https://www.cnblogs.com/ksguai/p/5869558.html 管理工具: Microsoft SQL Server Manageme ...

  9. regular expression, grep (python, linux)

    https://docs.python.org/2/library/re.html re.match(pattern, string, flags=0)  尝试从字符串的起始位置匹配一个模式 re.s ...

  10. Python 多继承(新式类) 的mro算法

    转载自:http://www.cnblogs.com/panyinghua/p/3283831.html mro即method resolution order,主要用于在多继承时判断调的属性的路径( ...