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;            
                            
            }            
    };
  • 相关阅读:
    dll学习
    mysql解压版安装
    mysql创建用户以及搭建数据库
    Springboot使用mybatis-plus
    分布式系统
    2、Zookeeper安装以及dubbo-admin的安装启动
    搭建分布式系统(idea+springboot+dubbo)
    Zookeeper下载和启动
    Spring Cloud底层原理
    Redis
  • 原文地址:https://www.cnblogs.com/zhyfzy/p/4457252.html
Copyright © 2011-2022 走看看