LightOJ 1104 Birthday Paradox

来源:互联网 发布:h5开心农场源码 编辑:程序博客网 时间:2024/05/16 12:08

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26819


题意:假设一年有n天,求至少有多少人可以使得至少两个人的生日为一天的概率不小于0.5。

思路:现在有m个人,P(至少两个人的生日为一天的概率不小于0.5) = 1 - P(所有人的生日都不在一天的概率) = 1 - C(n,m)*m!/n^m , 如果此时加一个人那么会变成1 - C(n,m+1)*(m+1)!/n^(m+1)。观察后面的式子,发现系数多了一个(n-m)/n。所以我们只需要不断增大m使得后面式子小于等于0.5即可。题目求你邀请的人,所以还要把自己去掉。


#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdlib>#include <iostream>#include <algorithm>#include <stack>#include <map>#include <set>#include <vector>#include <sstream>#include <queue>#include <utility>using namespace std;#define rep(i,j,k) for (int i=j;i<=k;i++)#define Rrep(i,j,k) for (int i=j;i>=k;i--)#define Clean(x,y) memset(x,y,sizeof(x))#define LL long long#define ULL unsigned long long#define inf 0x7fffffff#define mod %100000007int T;int n;int main(){    cin>>T;    int k = 0;    while(T--)    {        cin>>n;        int ans = 1;        double p = 1;        while( p > 0.5 )        {            p *= (double)(n-ans)/n;            ans++;        }        printf("Case %d: %d\n",++k,ans-1);    }    return 0;}


0 0
原创粉丝点击