Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls
2016-04-13 15:31
423 查看
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.
Sample test(s)
input
output
input
output
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:
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.
Sample test(s)
input
3 2 2 1
output
3
input
4
1
2
34
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 31 1 2 2 32 1 1 2 3
这道题让我学会了组合数的计算。由于直接用组合数公式会导致结果不准确。如C(100,50)这样,假设用乘一个数除一个数的方法,那么可能会导致不能整除而会发生误差。
思路:若前i种颜色的方法总数是f(i),那么第i+1种颜色的方法总数是f(i+1)=f(i)*C(sum(i+1)-1,a[i+1]-1),当中sum(i+1)是前i+1种颜色的个数总和。#include<stdio.h>
#include<string.h>
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
#define ll __int64
#define maxn 1000000007
int a[1600];
ll c[1050][1060];
ll sum;
int main()
{
int n,m,i,j,sum1;
for(i=1;i<=1000;i++)c[i][0]=1;
for(i=1;i<=1000;i++){
for(j=1;j<=i;j++){
if(i==j)c[i][j]=1;
else if(i>j)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%maxn;
}
}
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sum1=a[1];sum=1;
for(i=2;i<=n;i++){
sum1+=a[i];
//printf("%d %d\n",a[i]-1,sum1-1);
sum=(sum*c[sum1-1][a[i]-1])%maxn;
//sum=(sum*f(a[i]-1,sum1-1))%maxn;
//printf("%lld\n",sum);
}
printf("%I64d\n",sum);
}
return 0;
}
相关文章推荐
- RSA算法学习
- LightOJ 1138 Trailing Zeroes (III) 打表
- JDBC学习总结(四)
- Linux 后台进程管理器 supervisor 安装配置(使用httpd来做被监控进程)
- 在Repeater中实现CheckBox 的全选及反选
- TS流详细解析
- Android Studio 中使用SVN注意事项
- Android开发使用的常见第三方框架汇总
- 图的最短路径算法分析与总结
- 机器学习算法汇总:人工神经网络、深度学习及其它
- 内存调试的东西D/dalvikvm( 809 ): GC_CONCURRENT freed
- MongoDB适用和不适用场景总结
- HBase简介
- 4.Object Types
- Vim 配置 工欲善其事,必先利其器
- TS流概况
- Jquery取值中 javascript相关计算bug
- 集合工具类Collections用法(API简略翻译)
- toolbar样式定制
- Block变量,被__block修饰的变量称作Block变量。 基本类型的Block变量等效于全局变量、或静态变量。