LightOJ

来源:互联网 发布:上海 逛街 知乎 编辑:程序博客网 时间:2024/06/06 12:46

点击打开题目


题意: 给出一年有多少天, 问主人至少需要邀请多少人可以使至少两个人生日为同一天的概率大于等于0.5

思路: 至少两个人生日在同一天的概率 = 1- 任何两个人生日都不在同一天. 即

                                     

            由于P(E)是递增的, 所以遍历到P(E) >= 0.5 退出循环即可, 由于  较大, 故可以先用对数求 / .


#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#include<vector>#include<cmath>#include<functional>using namespace std;typedef long long ll;const int maxn = 1e5 + 10;const double eps = 1e-9;const int inf = 1 << 30;int main() {    int t, v = 1, n;    scanf("%d", &t);    while(t--) {        scanf("%d", &n);        int i;        double a = 0, b;        for(i = 1; i < n; i++) {            a += log(1.0 * (n - i + 1));            b = i * log(n);            if(1 - exp(a - b) > 0.5) break;        }        printf("Case %d: %d\n", v++, max(i - 1, 1));    }    return 0;}