luckycoin

http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1004&cid=737


原作答案以及分析 http://blog.csdn.net/aaron_1996/article/details/53415209





//幸運硬幣 2016年12月5日09:05:52
#include <bits/stdc++.h>
using namespace std;
#define MAXN 75 //迭代次數 ????????s
#define MAXM 11


int num[MAXM];
double p[MAXM];
double kill[MAXM][MAXN+2];//某種硬幣被kill的概率
double reser[MAXM][MAXN+2] ;//某種硬幣存活的概率
double ans[MAXM];
int m;


void solve (){
    if (m==1)
    {
        ans[0]=1;
        return ;
    }


    for(int i = 0 ; i < m ; ++i){
            double tempp = p[i];
        for (int j = 0 ; j <= MAXN ;++ j){
            kill[i][j] = pow((1-tempp),num[i]);
            reser[i][j] = 1-kill[i][j];
            tempp*= p[i] ;
        }
    }
    for (int i = 0 ; i < m ; ++i){
        ans[i] = 0;
        for (int j = 0 ; j < MAXN ; ++ j){
                double  x = 1;
                for(int k = 0 ; k<m ;++k)
                    if(k!=i)
                    x *= kill[k][j];
            ans[i]+= (reser[i][j]-reser[i][j+1])*x; //????
        }
    }


}


int main(){


    int t ;
    scanf("%d",&t);
    while (t--){
        cin>>m;
        for(int i =0 ; i < m ;++i)
            cin>>num[i]>>p[i];
        solve();
        for(int i = 0 ; i < m ; ++ i)
            printf("%.6f%c",ans[i],i==m-1?'\n':' ');
    }
    return 0;
}


有兩個點不是很明白, 其中的MAXN = 75 怎麼計算出的?

還有就是  爲什麼計算ans的時候 用 reser[i][j]-reser[i][j+1] ?


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章