zoukankan      html  css  js  c++  java
  • POJ2151 Check the difficulty of problems

    Description

    Organizing a programming contest is not an easy job. To avoid making the problems too difficult, the organizer usually expect the contest result satisfy the following two terms:

    1. All of the teams solve at least one problem.
    2. The champion (One of those teams that solve the most problems) solves at least a certain number of problems.

    Now the organizer has studied out the contest problems, and through the result of preliminary contest, the organizer can estimate the probability that a certain team can successfully solve a certain problem.

    Given the number of contest problems M, the number of teams T, and the number of problems N that the organizer expect the champion solve at least. We also assume that team i solves problem j with the probability \(P_{ij}(1 \leqslant i \leqslant T, 1\leqslant j \leqslant M)\). Well, can you calculate the probability that all of the teams solve at least one problem, and at the same time the champion team solves at least N problems?

    Input

    The input consists of several test cases. The first line of each test case contains three integers \(M (0 < M \leqslant 30), T (1 < T \leqslant 1000)\) and \(N (0 < N \leqslant M)\). Each of the following T lines contains M floating-point numbers in the range of [0,1]. In these T lines, the j-th number in the i-th line is just \(P_{ij}\). A test case of M = T = N = 0 indicates the end of input, and should not be processed.

    Output

    For each test case, please output the answer in a separate line. The result should be rounded to three digits after the decimal point.

    Sample Input

    2 2 2
    0.9 0.9
    1 0.9
    0 0 0
    

    Sample Output

    0.972
    

    题目大意,给T个队伍,M个题目,给出每个队伍做出每个题的概率\(P_{ij}\),求每个队伍至少做出一道题,且冠军队伍至少做出\(N\)道题的概率

    由于每个队伍做题的概率是独立的,所以我们可以提前统计出第\(i\)个队伍至少做出\(k\)个题的概率\(F[i][k]\)

    然后我们统计出每个队伍至少做出1道题的概率\(Ans1\),再统计出每个队伍做出\(1~N-1\)的概率\(Ans2\),答案即为\(Ans1-Ans2\)

    /*program from Wolfycz*/
    #include<map>
    #include<set>
    #include<cmath>
    #include<cstdio>
    #include<vector>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define Fi first
    #define Se second
    #define lMax 1e18
    #define MK make_pair
    #define iMax 0x7f7f7f7f
    #define sqr(x) ((x)*(x))
    #define pii pair<int,int>
    using namespace std;
    typedef long long ll;
    typedef unsigned int ui;
    typedef unsigned long long ull;
    template<typename T>inline T read(T x){
        int f=1; char ch=getchar();
        for (;ch<'0'||ch>'9';ch=getchar())	if (ch=='-')	f=-1;
        for (;ch>='0'&&ch<='9';ch=getchar())	x=(x<<1)+(x<<3)+ch-'0';
        return x*f;
    }
    inline void print(int x){
        if (x<0)	putchar('-'),x=-x;
        if (x>9)	print(x/10);
        putchar(x%10+'0');
    }
    const int N=1e3,M=30;
    double P[N+10][M+10],F[N+10][M+10];
    int main(){
        while (true){
            int m=read(0),n=read(0),k=read(0);
            //m:problems n:teams
            memset(F,0,sizeof(F));
            if (!(n+m+k))   break;
            for (int i=1;i<=n;i++)
                for (int j=1;j<=m;j++)
                    scanf("%lf",&P[i][j]);
            for (int i=1;i<=n;i++){
                F[i][0]=1;
                for (int j=1;j<=m;j++){
                    for (int k=j;k;k--)
                        F[i][k]=F[i][k-1]*P[i][j]+F[i][k]*(1-P[i][j]);
                    F[i][0]*=(1-P[i][j]);
                }
                for (int j=1;j<=m;j++)  F[i][j]+=F[i][j-1];
            }
            double Ans1=1,Ans2=1;
            for (int i=1;i<=n;i++)  Ans1*=1-F[i][0];
            for (int i=1;i<=n;i++)  Ans2*=F[i][k-1]-F[i][0];
            printf("%.3f\n",Ans1-Ans2);
        }
        return 0;
    }
    
    作者:Wolfycz
    本文版权归作者和博客园共有,欢迎转载,但必须在文章开头注明原文出处,否则保留追究法律责任的权利
  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/Wolfycz/p/15795536.html
Copyright © 2011-2022 走看看