pongo(英雄会)题解之理想随机数发生器

转载 2013年12月03日 09:17:45

点击打开转载地址

不得感慨下本科没好好学习概率论,这道题用概率论很简单。

首先还是题目:

题目详情:

一个理想随机数发生器R,给定参数正整数x,它可以均匀随机产生一个闭区间[0,x]之间的实数(注意是实数,每个实数出现的概率相同)R(x)。现在给定3个正整数a,b,c,我们使用a,b产生两个随机实数R(a), R(b),问R(a) + R(b) <= c的概率有多大?

输入: 正整数a,b,c。正整数均不超过10000

输出: R(a) + R(b) <= c的概率。注意输出是一个有理数(分数),请化为最简分数。(分子分母的最大公约数是1)。

例如 输入a = 1, b = 1, c = 4,输出"1/1"


这道题转换为概率论题目就是:x与y分别在[0,a]和[0,b]上服从均匀分布,并且x与y相互独立,求x+y<=z ,当z=c时的概率。

x与y分别在[0,a]和[0,b]上的概率密度为f(x)=1/a,f(y)=1/b;x与y相互独立,那么联合概率密度f(x,y)=1/(a*b)  x属于[0,a]、y属于[0,b],

....

....


用图示如下(假如a>=b):

就是求阴影部分的面积与矩形面积的比例,分c<=b、b<c<=a、a<c<a+b和c>=a+b四种情况求,记得最后需要约去公约数,即结果中的分子与分母的最大公约数为1,代码如下:

#include <stdio.h>  
#include <iostream>  
#include <string>  
#include<sstream>  
using namespace std;  
class Test {  
public:  
    static int maxG(int a,int b){  
        while(b){  
            int mid=b;  
            b=a%b;  
            a=mid;  
        }  
        return a;  
    }  
    static string calculate (int   a,int   b,int   c){  
        if(c>=a+b)return "1/1";  
        if(a<b){//for a>=b  
                int mid =a;  
                a=b;  
                b=mid;  
        }     
        int res=0;  
        int sqr=2*a*b;  
        if(c<=b){  
            res=c*c;  
        }else if(c>b&&c<=a){  
            //res=c*c-(c-b)*(c-b);  
            res=b*(2*c-b);  
        }else {//a<c<a+b  
            //res=2*a*b-(a+b-c)*(a+b-c);  
            res=2*c*(a+b)-a*a-b*b-c*c;  
        }  
        int maxGYS=1;  
        while((maxGYS=maxG(sqr,res))>1){  
            res/=maxGYS;  
            sqr/=maxGYS;  
        }  
        std::stringstream ss;  
        ss<<res<<"/"<<sqr;  
        std::string ret=ss.str();     
        return ret;  
    }  
};  
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。  
int main(){     
    cout<<Test::calculate(1,3,2)<<endl;     
}   
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。


pongo(英雄会)题解之理想随机数发生器

不得感慨下本科没好好学习概率论,这道题用概率论很简单。 首先还是题目: 题目详情: 一个理想随机数发生器R,给定参数正整数x,它可以均匀随机产生一个闭区间[0,x]之间的实数(注意是实数,每...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2013年11月27日 21:15
  • 922

理想随机数发生器【解】--英雄会

一个理想随机数发生器R,给定参数正整数x,它可以均匀随机产生一个闭区间[0,x]之间的实数(注意是实数,每个实数出现的概率相同)R(x)。现在给定3个正整数a,b,c,我们使用a,b产生两个随机实数R...
  • xjm199
  • xjm199
  • 2013年12月21日 15:31
  • 713

csdn英雄会(pongo)题解之报数游戏

题目详情: 有n个人编号1-n,按照顺时针方向围成一个圆圈。它们预先定义好两个整数x,y。先从1号顺时针方向开始报数,报到x的人出圈,再从x的逆时针方向的后一个人从1开始报数,报到y的人出圈,再从...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年01月01日 21:16
  • 1036

英雄会(csdn pongo)题解之罐子和硬币

家里面真不是写代码的地,今天做这道题,中间出去n多次,到晚上9点才做出来。 罐子和硬币 题目详情: 有n个罐子,有k个硬币,每个罐子可以容纳任意数量的硬币。罐子是不透明的,起初你可以随机把这k个...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年02月12日 22:21
  • 1292

浅谈随机数发生器

我们平时所使用的无论什么编程语言都会提供一个随机数函数,而且它是伪随机数(Pseudo Random Number),它是由算法计算得出的,是可以预测的,也就是说当随机种子相同时,对于同一个随机函数,...
  • nash_
  • nash_
  • 2013年12月19日 01:51
  • 14635

pongo(英雄会)题解之均分01

这道题我没想到好的方法,今天翻群里面的聊天记录,看到了关于这题的讨论。下面解法的思想是借鉴了群里面 超然_烟火 的想法,我只是用自己的方法证明了下,下面是题目描述: 题目详情: 给定一个字符串,长度...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2013年12月27日 14:21
  • 1860

英雄会(csdn pongo)题解之朋友的礼物

这道题第一次没提交通过,因为我直接截断了小数点后面的8位,忘记四舍五入了。 朋友的礼物 题目详情: n个人,每个人都有一件礼物想送给他人,他们决定把礼物混在一起,然后每个人随机拿走一...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年01月19日 23:40
  • 991

[转]pongo英雄会-修路题解

转自:http://blog.csdn.net/shuyechengying/article/details/9821745 题目用图论的语言来叙述就是:一个起初没有边的图,不断随机...
  • zhang20072844
  • zhang20072844
  • 2013年11月13日 01:06
  • 1017

csdn英雄会(pongo)题解之回文数

题目描述: 如果一个数正着读和反着读一样大,则这个数叫做回文数,例如121是回文数,123454321是回文数。 现给定一个正整数x,输出一个回文数y,要求y > x,并且组成x的所有数字之和与组成...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年01月12日 15:06
  • 1348

英雄会(csdn pongo)题解之平衡二叉树

平衡二叉树 题目详情: 平衡二叉树的定义是递归定义的: (1) 单个节点是平衡二叉树 (2)平衡二叉树的左右子树分别都是平衡二叉树 (3)平衡二叉树的左右子树高度差不超过1。 求n个节点...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年01月19日 22:07
  • 1193
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pongo(英雄会)题解之理想随机数发生器
举报原因:
原因补充:

(最多只允许输入30个字)