题意:队伍需要n个人,有m个社团,每个社团有ai 个人 队伍里面现在已经有一个属于 h 社团的人, 从所有其他人中 选 n-1个人至少有一个属于 h社团的概率。
解题思路:概率水题。
解题代码:
1 // File Name: 107b.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月24日 星期二 21时40分11秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 26 using namespace std; 27 int n , m , h ; 28 int a[1005]; 29 int main(){ 30 scanf("%d %d %d",&n,&m,&h); 31 int sum = 0 ; 32 for(int i = 1;i <= m;i ++) 33 { 34 scanf("%d",&a[i]); 35 sum += a[i]; 36 } 37 a[h] -- ; 38 n -- ; 39 sum -- ; 40 if(sum < n ) 41 { 42 printf("-1 "); 43 return 0 ; 44 } 45 int r1 = sum; 46 int l1 = (sum-a[h] + 1); 47 int l2 = sum - a[h] - n +1 ; 48 // printf("%d %d %d ",r1,l1,l2); 49 double ans = 1.0; 50 for(int i = l1 ;i <= r1;i ++) 51 { 52 ans = ans * (double)(l2+(i-l1))*1.0/i; 53 } 54 printf("%f ",1.0- ans); 55 return 0; 56 }