HDU 4586 Play the dice(概率题,推公式)

Problem Description:

There is a dice with n sides, which are numbered from 1,2,...,n and have the equal possibility to show up when one rolls a dice. Each side has an integer ai on it. Now here is a game that you can roll this dice once, if the i-th side is up, you will get
ai yuan. What‘s more, some sids of this dice are colored with a special different color. If you turn this side up, you will get once more chance to roll the dice. When you roll the dice for the second time, you still have the opportunity to win money and rolling
chance. Now you need to calculate the expectations of money that we get after playing the game once.

Input:

Input consists of multiple cases. Each case includes two lines.

The first line is an integer n (2<=n<=200), following with n integers ai(0<=ai<200)

The second line is an integer m (0<=m<=n), following with m integers bi(1<=bi<=n), which are the numbers of the special sides to get another more chance.

Output:

Just a real number which is the expectations of the money one can get, rounded to exact two digits. If you can get unlimited money, print inf.

Sample Input:

6 1 2 3 4 5 6

0

4 0 0 0 0

1 3

Sample Output:

3.50

0.00

解题思路:

当n == m时,输出inf, 不然结果就是 sum / (n - m);

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define LL long long
using namespace std;
const int MAXN = 1000 + 10;
int main()
{
    int sum, n, m;
    while(scanf("%d", &n)!=EOF)
    {
        sum = 0;
        int x;
        for(int i=0;i<n;i++)
        {
            scanf("%d", &x);
            sum += x;
        }
        scanf("%d", &m);
        for(int i=0;i<m;i++)
            scanf("%d", &x);
        if(sum == 0)
        {
            printf("0.00\n");
            continue;
        }
        if(n == m)
        {
            printf("inf\n");
            continue;
        }
        printf("%.2lf\n", (double)sum / (n - m));
    }
    return 0;
}
时间: 2024-10-10 10:05:13

HDU 4586 Play the dice(概率题,推公式)的相关文章

HDU 4586 Play the Dice(概率+期望)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4586 Problem Description There is a dice with n sides, which are numbered from 1,2,...,n and have the equal possibility to show up when one rolls a dice. Each side has an integer ai on it. Now here is a

【BZOJ1426】收集邮票 概率DP 论文题 推公式题

链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/46468557"); } 题解: 并没有什么卵用,首先有一个神思路.然后神推公式.以下这篇博客写得非常详尽..另外题意是买第 i 次花 i 元,不是标号为 i 的邮票花 i 元. <strong">

sgu495:概率dp / 推公式

概率题..可以dp也可以推公式 抽象出来的题目大意: 有 n个小球,有放回的取m次  问 被取出来过的小球的个数的期望 dp维护两个状态 第 i 次取出的是 没有被取出来过的小球的 概率dp[i] 和取出的是已经被取出来过的小球的概率np[i]; 如果第 i-1 次取出的是已经被取出来过的小球 那么第 i 次取出没有取出来过小球的概率即为 dp[i-1]: 反之则为 dp[i-1] - 1/n(没有取出来过的小球少了一个) 所以可以得到状态转移方程 dp[i]=dp[i-1]*(dp[i-1]-

hdu 4586 Play the Dice 数学 概率

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4586 题意: 给一个n面的骰子,每一面有一个分数,掷到的话可以得到那个分数 其中有m个面,当你掷到这些面的时候可以再掷一次 求得分的数学期望 思路: 每轮得分的期望 乘以 轮数的期望 每轮得分的期望 = 各个面的平均分 = sum / n; 轮数期望 = 1 + m/n + (m/n)^2 + ... = n - m / n 所以ans = sum / (n - m) ,其中 n!=m 要特判一些情

hdu 4586 Play the Dice (概率+等比数列)

Play the Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 1328    Accepted Submission(s): 429 Special Judge Problem Description There is a dice with n sides, which are numbered from 1,2,...

hdu 4586 Play the Dice

题意:有n个格子,每个格子有一个价值ai,每次翻开该格子都会获得该格子的价值,并且每个格子的翻开的概率是相同的,其中m个格子翻开之后可以获得额外的bi次翻动机会,求一个人的获得价值的期望 sum=a1+a2+....+an,每次翻开一个格子的获得价值a=sum/n,每次可以获得额外翻动机会的概率为q=m/n,那么获得价值的期望为a*(q^0+q^1+....+q^INF)=sum/(n-m) if(sum==0)puts("0"); else (n==m) puts("inf

poj 3863&amp;&amp;Gym - 101308B Business Center (水题/推公式)

题意:给你 m 个电梯,每个电梯有两个按钮, u 和 d ,分别代表上 u 层,和下 d 层,每一次你都从第0层开始做电梯,你可以按这个电梯按钮 m 次,假设楼层无限高,问你可以到达的最低楼层是多少,0层除外? 思路: 我们假设按 上走 x 次, 那么下走为 (n-x) 次 那么可以到达的楼层为 k = a*x - b*(n-x) 另上式等于0,我们可以得到当 x'= b*n/(a+b) 时为第0层 由于 x 必须为正整数,我们对 x' 向上取整,就得到可以到达的最低楼层 但是现在有一个漏洞,如

hdu 5073 2014鞍山现场赛题 物理题

http://acm.hdu.edu.cn/showproblem.php?pid=5073 推公式即可,质心公式segma(xi*wi)/segma(wi) 最终剩下的一定是连续n-k个星 然后枚举左边需要移除几个星即可 计算I的时候展开来算 比较坑的地方在于,星星的位置如果是int型,一定记得Double计算的时候 *1.0或者直接将位置数组声明为double  否则WA到死... //#pragma comment(linker, "/STACK:102400000,102400000&q

HDU 4870 Rating(概率、期望、推公式) &amp;&amp; ZOJ 3415 Zhou Yu

其实zoj 3415不是应该叫Yu Zhou吗...碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞.参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒)四五次才上来写这份有抄袭嫌疑的题解... 这2题很类似,多校的rating相当于强化版,不过原理都一样.好像是可以用高斯消元做,但我不会.默默推公式了. 公式推导参考http://www.cnblogs.com/chanme/p/3861766.html#2993306 http://www.cn