Birthday Paradox(简单概率)

题意:给定一个时间作为一年的天数,问至少邀请多少个人才能使至少有两个人的生日是同一天的概率不小于0.5。

正面算显然是不好算的,所以我们可以算其互斥事件(应该是这样叫,高中知识忘光了):没有人的生日是同一天的概率,然后再用总概率1减去它就可以得到至少两个人生日是同一天的概率了。

P(所有人的生日都不同)=(day/day)*(day-2/day)*(day-3/day)*...=A(day,n)/(day^n);

其实后面的通式没啥用,我们暴力算就行了,day的范围是1e5,实现暴力了一下结果是300+,t=2e4,所以不会超时。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string.h>
#include <string>

using namespace std;

double p;
int n;

const int N = 110;

int val[N];
double cp[N];
double dp[N * N];


int main()
{
    int t;
    scanf("%d", &t);
    for (int k = 1; k <= t; k++)
    {
        int n;
        scanf("%d", &n);
        int ans = 1;
        double sign = 1.0;
        while (sign > 0.5) {
            sign *= (double)1.0 * (1.0 + n - ans) / n;
            if (sign <= 0.5) {
                break;
            }
            ans++;
        }
        printf("Case %d: %d\n",k, ans-1);//其实我自己都搞不懂为啥要减一,上面题面365不都是23吗,咋下面是22,其他的样例我试了一下暴力结果都比样例输出大1.。。
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值