Birthday Paradox(生日悖论)(概率)

Birthday Paradox(生日悖论)(概率)

judge:LightOJ - 1104
vjudge:vjudge
Time limit:2000 ms
Memory limit:32768 kB
OS:Linux
Source:Problem Setter: Jane Alam Jan

描述vjudge

Sometimes some mathematical results are hard to believe. One of the common problems is the birthday paradox. Suppose you are in a party where there are 23 people judge:LightOJ - 1104
vjudge:vjudge

Input

judge:LightOJ - 1104
vjudge:vjudge

Output

judge:LightOJ - 1104
vjudge:vjudge

Sample Input

2
365
669

Sample Output

Case 1: 22
Case 2: 30

题意

很有意思的一道题。

有时有些数学结果很难相信。其中一个常见的问题是生日悖论。假设你在一个有23个人的聚会上,包括你。聚会上至少有两个人过同一个生日的可能性有多大?令人惊讶的是,结果超过了0.5。现在你必须做相反的事情。你已经给出了一年中的天数。记住,你可以在一个不同的星球,例如,在火星,一年是669天长。你必须找到在一个聚会上你必须邀请的最少人数,这样在聚会上至少两个人有相同生日的概率至少是0.5。

输入

输入以整数 T ( T ≤ 20000 ) T(T≤20000) TT20000开始,表示测试用例的数量。

每种情况下,在一行中包含一个整数 n ( 1 ≤ n ≤ 1 0 5 ) n(1≤n≤10^5) n1n105,表示行星一年中的天数。

输出

对于每个案例,打印案例编号和所需结果。

思路

先算出没有人生日相同的概率,拿1减去结果即为有人生日相同的概率。

设一年有n天,聚会有m个人(包括自己)。

列出方程: 1 − C n 1 ⋅ C n − 1 1 ⋯ C n − m + 1 1 n m > = 0.5 1-\frac{C^1_n·C^1_{n-1}\cdots C^1_{n-m+1}}{n^m}>=0.5 1nmCn1Cn11Cnm+11>=0.5

即: n ⋅ ( n − 1 ) ⋯ ( n − m + 1 ) n m < = 0.5 \frac{n·(n-1)\cdots (n-m+1)}{n^m}<=0.5 nmn(n1)(nm+1)<=0.5

为了简化运算,把分子分母分别拆开。
n − 1 n ⋅ n − 2 n ⋯ n − m + 1 n < = 0.5 \frac{n-1}{n}·\frac{n-2}{n}\cdots \frac{n-m+1}{n}<=0.5 nn1nn2nnm+1<=0.5

到这里我相信所有人都会做这道题了。

代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <cstring>
#include <cmath>
#define lowbit(a) ((a)&-(a))
#define maxn 100005
#define eps 0.000000001
using namespace std;
typedef long long ll;

int main(){
//    freopen("in.txt", "r", stdin);
    ios::sync_with_stdio(false);
    int T;
    cin >> T;
    for(int ca = 1; ca <= T; ca++){
        int n;
        cin >> n;
        double p = 1;
        int ans = 1;
        for(int j = n - 1; j >= 1; j--){
            p *= j * 1.0 / n;
            if(p - eps <= 0.5) break;
            ans++;
        }
        printf("Case %d: %d\n", ca, ans);
    }
    return 0;
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值