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;            

        }
};
时间: 2024-10-21 17:47:07

TCO 2015 Round 1B DIV1 500 概率题的相关文章

TCO 2015 Round 2A DIV1

ModModMod 傻逼数论 题意: 这是一道卖萌的题..给你一个取模序列$m$,令$f(x)=(\cdots (x\ mod\ m[0])\ mod m[1])\mod m[2]\cdots $,问你$\sum_{i=1}^R f(i)$的值是多少 题解: 容易知道一点,若$i<j$且$m[i]\le m[j]$,那么$m[j]$就是没有意义的,所以首先将m变成递减序列.接下来观察每次取模后的结果,由于是从1到R,所以序列第一次取模后会变成: $$(0+1+2+\cdots+m[0]-1)+(

2018 TCO Algorithm Round 1B

250 LineOff 随便搞 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 class LineOff { 5 public: 6 int movesToDo(string points) { 7 stack<char> st; 8 int ret = 0, l = points.length(); 9 for(int i = 0; i < l; ++i){ 10 if(!st.empty() &&

TopCoder SRM502 Div1 500 贪心 01背包

原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级,只需要对于每一个问题是否被解决做出决策,那么显然直接 01 背包就好了. 事实上,我们是可以贪心地确定两个问题的优先程度的. 对于两个问题,假设分别为 a 和 b,则先做 a 再紧接着做 b 和先做 b 再紧接着做 a 的收益之差为 \[ \begin{eqnarray*} &&(-dec_a

TCO 2014 Round 1C 概率DP

TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover,肯定就是dp[l][r][n], 走了n步之后,左边cover了l,右边cover了r. 一开始DP没有搞清楚,这个要画一下图就更清楚了. 转移方程就是概率的传递方向. 1: double dp[505][505][2]; // l,r,n steps unsed; 2: class RedPain

HDU 4576 Robot(概率题)

Robot Problem Description Michael has a telecontrol robot. One day he put the robot on a loop with n cells. The cells are numbered from 1 to n clockwise. At first the robot is in cell 1. Then Michael uses a remote control to send m commands to the ro

[Codeforces Round #444 div1] C.DZY Loves Colors 【线段树】

题目链接:CF Round #444 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的区间完全被要求修改的区间包含时,就直接打上赋值的标记然后 return .但是这样这个节点中每个位置原先的值不同,需要进行的属性权值修改也就不同,是不能直接实现的.如果我们在节点表示的区间被修改的区间包含时,并不直接打标记 return ,而是当节点表示的区间被修改的区间完全包含而且这个节点中的每个

Codeforces Round #257 (Div. 2) E题:Jzzhu and Apples 模拟

E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Jzzhu has picked n apples from his big apple tree. All the apples are numbered from 1 to n. Now he wants to sell them to

SRM 618 DIV1 500

非常棒的组合问题,看了好一会,无想法.... 有很多做法,我发现不考虑顺序的最好理解,也最好写. 结果一定是两种形式 A....A   dp[n-1] A...A...A sgma(dp[j]*dp[n-j-1])( 1<=j<=n-2) 最后乘上n! 什么时候才能自己在比赛中做出一个500分来啊!!! class LongWordsDiv1 { public : int count(int n) { int i,j; fact[0] = 1; for(i = 1; i <= n; i

HDU 4839 The Game of Coins 概率题。(母函数

The Game of Coins mark: #include"cstdio" #include"iostream" #include"queue" #include"algorithm" #include"set" #include"queue" #include"cmath" #include"string.h" #include"