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\n",i,pa[i]);

            

            double ans=0;

            for (i=0;i<n;i++)

            {

                ans+=1-pa[i];

            }

            return ans;            

                        

        }            

};

 

你可能感兴趣的:(round)