题意:
给你一年有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
", ++kase, cnt-1);
43 }
44 return 0;
45 }