题意:
给你一年有n天,求至少有m人使得至少有两个人在同一天生日的概率不少于0.5.
分析:
任意两个人不在同一天生日的概率为C(n,m)*m!/n^m,它的对立事件A为至少有两个人在同一天生日,则P(A) = 1 - C(n,m)*m!/n^m = 1 -
P(n,m)/n^m(后一个P表示排列); 根据题意有P(A) >= 0.5 即 P(n, m)/n^m <= 0.5. 该式的展开式为 p = n/n*(n-1)/n*(n-2)/n*...*(n-m+1)/n,
因此只要判断该式的累乘结果小于等于0.5时,输出此时的m即可.
代码如下:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <fstream> 5 #include <ctime> 6 #include <cmath> 7 #include <cstdlib> 8 #include <algorithm> 9 #include <set> 10 #include <map> 11 #include <list> 12 #include <stack> 13 #include <queue> 14 #include <iterator> 15 #include <vector> 16 17 using namespace std; 18 19 #define LL long long 20 #define INF 0x3f3f3f3f 21 #define MOD 1000000007 22 #define MAXN 10000010 23 #define MAXM 1000010 24 25 26 int main() 27 { 28 int kase = 0; 29 int t; 30 scanf("%d", &t); 31 while(t--) 32 { 33 int n; 34 scanf("%d", &n); 35 double p = 1.0; 36 int cnt = 0; 37 while(p > 0.5) 38 { 39 p *= 1.0*(n-cnt)/n; 40 cnt++; 41 } 42 printf("Case %d: %d\n", ++kase, cnt-1); 43 } 44 return 0; 45 }
时间: 2024-10-21 09:53:46