Hdu 4159 & COJ 1536 Indomie

简单概率题。

题目大意:Amjad去买菜,在他的前面有n人,Indomies份,他需要买到名为Indomie的菜,问这种可能的概率是多少?

 

思路:假设共有i人不买Indomie,则不买Indomie的方案有C(n,i)*2^n-i; //其他的人去买Rice或者Sugar.

以购买Indomie的份数分类,则所有的方案是 S1 = A0+A1+A2+A3+A4……As;

而还有剩余的Indomie的方案是S2 = A0+A1+A2+A3+A4…….As-1;

 

所以,概率就是S1/S2%。注意要考虑s>ns == 0的情况。 

CODE:

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
using  namespace std;

const  int SIZE =  101;
int N, S;
__int64 pow2[SIZE];

void init()     // 2的幂
{
     int s =  1;
    pow2[ 0] =  1;
     for( int i =  1; i <=  50; i++)
    {
        pow2[i] = pow2[i- 1]* 2;
    }
     return ;
}


double PAC( int n,  int m)                // Permutation and Combination,注意要用double
{
     double s =  1, i; 
     for(i =  0; i < m; i++)
        s *= (n-i)/(i+ 1);
      return s;
}


int main()
{
     int i, j;
     int n, s;
    init();
     while(~scanf( " %d%d ", &n, &s))
    {
         double sum1 =  0, sum2 =  0;
         if(s ==  0)                                  //  s == 0
        {
            printf( " 0.00000\n ");
             continue;
        }
         if(s > n)                                   //  s > n
        {
            printf( " 100.00000\n ");
             continue;
        }
         for(i =  0; i <= s; i++)
        {
            sum1 += PAC(n, i)*pow2[n-i];
             if(i == s- 1)
            {
                sum2 = sum1;
            }
        }
        printf( " %.5lf\n "100.0*sum2/sum1);
    }
     return  0;

} 

你可能感兴趣的:(dom)