zoukankan      html  css  js  c++  java
  • TCO 2015 Round 1B DIV1 500 概率题

    【题意】现在有一些线索,每个线索被发现的概率p[i],如果线索i被知道,那么其他线索也可能会被知道,用vector<string> c给出,c[i][j]='Y'表示知道i这个线索,j这个线索能直接知道,问最终发现的线索个数的期望。

    所有p[i]的和不是1...

    求每个clue被选中的概率,由题意,如果知道第i个数,那么可以立即知道其他一些点,那么可以先用floyd,求出当知道结点i后应该知道哪些结点。

    然后两重求反,1-(1-p[i1])(1-p[i2])...(1-p[ik])就是所求答案,其中选中i1,i2,...,ik中的任意一个都能选中i。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<stack>
    #include<vector>
    #include<queue>
    #include<string>
    #include<sstream>
    #define eps 1e-9
    #define ALL(x) x.begin(),x.end()
    #define INS(x) inserter(x,x.begin())
    #define FOR(i,j,k) for(int i=j;i<=k;i++)
    #define MAXN 1005
    #define MAXM 40005
    #define INF 0x3fffffff
    using namespace std;
    typedef long long LL;
    int i,j,k,n,m,x,y,T,ans,big,cas,num;
    bool flag;
    double pa[MAXN];
    class TheTips
    {
            public:
            double solve(vector <string> c, vector <int> p)
            {
                int n=c.size();
                for (k=0;k<n;k++)
                {
                    for (i=0;i<n;i++)
                    {
                        for (j=0;j<n;j++)
                        {
                            if (i==j || j==k || i==k) continue;
                            if (c[i][k]=='Y'&& c[k][j]=='Y') c[i][j]='Y';
                        }
                    }
                }
                
                for (i=0;i<n;i++) c[i][i]='Y';
                
                for (i=0;i<n;i++) pa[i]=1;
                //for (i=0;i<n;i++) cout<<c[i]<<endl;
                
                for (j=0;j<n;j++)
                {
                    for (i=0;i<n;i++)
                    {
                        if (c[i][j]=='Y')
                        {
                            pa[j]*=1-p[i]*0.01;
                        }
                    }
                }
                //for (i=0;i<n;i++) printf("%d %f
    ",i,pa[i]);
                
                double ans=0;
                for (i=0;i<n;i++)
                {
                    ans+=1-pa[i];
                }
                return ans;            
                            
            }            
    };
  • 相关阅读:
    微信公众账号报错 返回码说明
    2013与2014之流水
    【Leetcode刷题】字符串模式匹配算法知多少
    【数据库测试工具】认识Sysbench
    【论文笔记】《基于深度学习的中文命名实体识别研究》阅读笔记
    分享一份关于Hadoop2.2.0集群环境搭建文档
    【Java实践】Kettle从一次实验说起
    【资源共享】eBook分享大集合
    java入门知识
    python编程规范系列--建议08~18
  • 原文地址:https://www.cnblogs.com/zhyfzy/p/4457252.html
Copyright © 2011-2022 走看看