• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

LightOJ 1104

题意:

  给你一年有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 }

 

posted on 2016-08-03 19:34  tony-cao  阅读(293)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3