Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls
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.
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.
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.
3 2 2 1
3
4 1 2 3 4
1680
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 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; }
相关文章
- [AngularJS 1.6] ngModelOptions and inheritance
- 【Codeforces Round #635 (Div. 2) D】Xenia and Colorful Gems
- 【Codeforces Round #635 (Div. 2) C】Linova and Kingdom
- 【Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B】 Code For 1
- 【ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) D】Tree
- 【Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined) B】 Conan and Agasa play a Card Game
- 【Codeforces Round #457 (Div. 2) A】 Jamie and Alarm Snooze
- 【Codeforces Round #442 (Div. 2) B】Nikita and string
- 【codeforces 791B】Bear and Friendship Condition
- 【codeforces 761C】Dasha and Password(动态规划做法)
- 【codeforces 760B】Frodo and pillows
- 【codeforces 515A】Drazil and Date
- 【Codeforces Round #435 (Div. 2) C】Mahmoud and Ehab and the xor
- 【Codeforces Round #431 (Div. 2) A】Odds and Ends
- 【Codeforces Round #430 (Div. 2) D】Vitya and Strange Lesson
- 【Codeforces Round #430 (Div. 2) B】Gleb And Pizza
- 【Codeforces Round #429 (Div. 2) C】Leha and Function
- 【codeforces 821E】Okabe and El Psy Kongroo
- C. Arthur and Table(Codeforces Round #311 (Div. 2) 贪心)