zoukankan      html  css  js  c++  java
  • 「UVA557」 Burger(概率

    本题征求翻译。如果你能提供翻译或者题意简述,请 提交翻译 ,感谢你的贡献。

    题目描述

    PDF

    输入输出格式

    输入格式:

    输出格式:

    输入输出样例

    输入样例#1: 复制
    3
    6
    10
    256
    输出样例#1: 复制
    0.6250
    0.7266
    0.9500

    题解

    这个本来是黄题被我打了个绿之后就变成绿题了哈哈哈哈哈哈哈

    为了方便想我们设一共有$2n$个人,每种汉堡有$n$个。

    >以下错解

    >那么前$2n-2$个人中间必须要恰好有$n$个人选了一种汉堡,$n-2$个人选了另一种汉堡。

    >那么就很好写啦,$ans=C_{2n-2}^{n}/2^{2n-2}$!

    >然后发现n=3的样例都过不了qwq

    >然后我跟队友YY分析出了原因:

    >如果到第$i$个人的时候已经选了$n$个汉堡的话,那么它之后的选择概率就会从$frac{1}{2}$变成$1$,这样直接把$2^{2n-2}$当方案数就会错掉qwq

    怎么办呢?

    考虑求后两个人能吃到不一样的汉堡的概率。

    那么$now=C_{2n-2}^{n-1}/2^{2n-2}$!

    这样我们只选到了$n-1$,就能保证每次选择的概率是$frac{1}{2}$了qwq

    最后容斥一下,$ans=1-now$就好了。

    .

    然后代码为了精度做了一些奇怪操作,总之就是求那个式子的就是了qwq

     1  qwerta 
     2 UVA557 Burger Accepted 
     3 代码 C++,0.37KB
     4 提交时间 2018-10-27 20:29:35
     5 耗时/内存 2620ms, 0KB
     6 #include<iostream>
     7 #include<cstdio>
     8 using namespace std;
     9 int main()
    10 {
    11     int t;
    12     scanf("%d",&t);
    13     while(t--)
    14     {
    15         int n;
    16         scanf("%d",&n);
    17         n/=2;
    18         double ans=1;
    19         int tim=2*n-2;
    20         for(int i=1;i<=n-1;++i)
    21         {
    22             ans*=(i+n-1);
    23             ans/=i;
    24             while(ans>=1&&tim)
    25             {
    26                 ans*=0.5;
    27                 tim--;
    28             }
    29         }
    30         while(tim)
    31         {
    32             ans*=0.5;
    33             tim--;
    34         }
    35         printf("%.4f
    ",1-ans);
    36     }
    37     return 0;
    38 }
  • 相关阅读:
    Java 多线程初级汇总
    C# 妈妈再打我一下生成器
    使用CKRule规则引擎处理多变业务
    Ckrule业务规则管理系统简介
    CKRule业务规则管理系统部署说明
    工资系统的公式引擎
    决策树与规则引擎
    使用CKRule实现促销管理系统
    使用CKRule实现PVC配方计算
    浅谈PVC塑料配方计算软件的设计
  • 原文地址:https://www.cnblogs.com/qwerta/p/9863549.html
Copyright © 2011-2022 走看看