zoukankan      html  css  js  c++  java
  • lightOJ 1317 Throwing Balls into the Baskets

    lightOJ  1317  Throwing Balls into the Baskets(期望)  解题报告

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88890#problem/A

    题目:

    Description

    You probably have played the game "Throwing Balls into the Basket". It is a simple game. You have to throw a ball into a basket from a certain distance. One day we (the AIUB ACMMER) were playing the game. But it was slightly different from the main game. In our game we were N people trying to throw balls into M identical Baskets. At each turn we all were selecting a basket and trying to throw a ball into it. After the game we saw exactly S balls were successful. Now you will be given the value of N and M. For each player probability of throwing a ball into any basket successfully is P. Assume that there are infinitely many balls and the probability of choosing a basket by any player is 1/M. If multiple people choose a common basket and throw their ball, you can assume that their balls will not conflict, and the probability remains same for getting inside a basket. You have to find the expected number of balls entered into the baskets after K turns.

    Input

    Input starts with an integer T (≤ 100), denoting the number of test cases.

    Each case starts with a line containing three integers N (1 ≤ N ≤ 16), M (1 ≤ M ≤ 100) and K (0 ≤ K ≤ 100) and a real number P (0 P ≤ 1). P contains at most three places after the decimal point.

    Output

    For each case, print the case number and the expected number of balls. Errors less than 10-6 will be ignored.

    Sample Input

    2

    1 1 1 0.5

    1 1 2 0.5

    Sample Output

    Case 1: 0.5

    Case 2: 1.000000

    题目大意:

    有n个人,m个篮筐,一共打了k轮,每轮每个人可以投一个球,每个球投进的概率都是p,求k轮后,投中的球的期望是多少?

    分析:

    因为每个人投进的概率都是相同的,所以期望也是相同的。因此只需要求出第一轮的期望就可以了,总期望=k*第一轮的期望。

    代码:

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 
     5 int t,n,m,k;
     6 double p,ans;
     7 int a[20][20];
     8 
     9 void init()
    10 {
    11     a[1][1]=1;
    12     a[1][0]=1;
    13     for(int i=2;i<20;i++)
    14     {
    15         a[i][i]=1;
    16         a[i][0]=1;
    17         for(int j=1;j<i;j++)
    18             a[i][j]=a[i-1][j]+a[i-1][j-1];
    19     }
    20 }
    21 
    22 double count(int j)
    23 {
    24     double b=1.0;
    25     for(int i=0;i<j;i++)
    26         b=b*p;//投中的期望
    27     for(int i=0;i<n-j;i++)
    28         b=b*(1.0-p);//没投中的期望
    29     return b*j*a[n][j];
    30 }
    31 
    32 int main()
    33 {
    34     int c=1;
    35     scanf("%d",&t);
    36     init();
    37     while(t--)
    38     {
    39         scanf("%d%d%d%lf",&n,&m,&k,&p);
    40         ans=0.0;//小数
    41         for(int i=0;i<=n;i++)
    42             ans+=count(i);//第一轮的期望
    43         printf("Case %d: %.7lf
    ",c++,ans*k);
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    再战设计模式(九)之组合模式
    再战设计模式(八)之桥接模式
    再战设计模式(七)之代理模式
    nyoj 题目2 括号配对问题
    剑指offer 面试题38
    杭电 1005
    九度oj 题目1552:座位问题
    九度oj 题目1482:玛雅人的密码 清华大学机试
    九度oj 题目1496:数列区间
    九度oj 题目1495:关键点
  • 原文地址:https://www.cnblogs.com/ttmj865/p/4748906.html
Copyright © 2011-2022 走看看