比赛

比赛

http://www.nowcoder.com/questionTerminal/23e79acc53ae46118f8a7d4e53b9a40b

https://ac.nowcoder.com/acm/problem/14734

题目理解:题意很简单,就是给你12道题3种途径的概率,求解决0~12题的概率。

题目分析:正着求每道题解决的概率,显然有点困难,那么我们不妨逆向考虑一下每道题无法解决的概率,答案显然 fail[i]=(1-a[i])(1-b[i])(1-c[i]) ** (fail[i]表示第i题无法解决的概率),之后就可以得知每道题成功的概率ac[i]=1-wa[i]。注意一下数据,总题数才12道,直接暴力dfs就行了,复杂度O(n^2),稳过,放弃思考dp了。

代码:

#include<stdio.h>
int n=12,i,j;
double a[16],b[16],c[16],wa[16],ac[16],ans[16];
void dfs(int now,int acc,double pro){//now表示当前解题位置,acc表示题目解决数量,pro代表当前情况概率
    if(now==13){
        ans[acc]+=pro;//加上当前概率
        return;
    }
    dfs(now+1,acc+1,pro*ac[now]);//当前成功
    dfs(now+1,acc,pro*wa[now]);//当前失败
}
int main()
{
    for(i=1;i<=n;i++){
        scanf("%lf",&a[i]);
    }
    for(i=1;i<=n;i++){
        scanf("%lf",&b[i]);
    }
    for(i=1;i<=n;i++){
        scanf("%lf",&c[i]);
    }
    for(i=1;i<=n;i++){
        wa[i]=(1-a[i])*(1-b[i])*(1-c[i]);//第i题没解出的概率
        ac[i]=1-wa[i];//第i题成功解出的概率
    }
    dfs(1,0,1.0);
    for(i=0;i<=n;i++){
        printf("%.6lf\n",ans[i]);
    }
}
全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务