HDU5645 DZY Loves Balls 数学

DZY Loves Balls

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 110    Accepted Submission(s): 80


Problem Description
DZY loves playing balls.

He has  n  balls in a big box. On each ball there is an integer written.

One day he decides to pick two balls from the box. First he randomly picks a ball from the box, and names it  A . Next, without putting  A  back into the box, he randomly picks another ball from the box, and names it  B .

If the number written on  A  is strictly greater than the number on  B , he will feel happy.

Now you are given the numbers on each ball. Please calculate the probability that he feels happy.
 

Input
First line contains  t  denoting the number of testcases.

t  testcases follow. In each testcase, first line contains  n , second line contains  n  space-separated positive integers  ai , denoting the numbers on the balls.

( 1t300,2n300,1ai300 )
 

Output
For each testcase, output a real number with 6 decimal places. 
 

Sample Input
   
   
   
   
2 3 1 2 3 3 100 100 100
 

Sample Output
   
   
   
   
0.500000 0.000000
 

题意:先后随机取2个,问后者比前者大的概率。

解:找出取出2个数相同的情况,所有情况减去这些的一半即满足的条件,除以C(N,2)即可。

AC代码:

//************************************************************************//
//*Author : Handsome How                                                 *//
//************************************************************************//
//#pragma comment(linker, "/STA    CK:1024000000,1024000000")
#pragma warning(disable:4996) 
#include <vector>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <algorithm>
#include <sstream>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <ctime>                                                
#include <cassert>
#if defined(_MSC_VER) || __cplusplus > 199711L
#define aut(r,v) auto r = (v)
#else
#define aut(r,v) __typeof(v) r = (v)
#endif
#define each(it,o) for(aut(it, (o).begin()); it != (o).end(); ++ it)
#define fur(i,a,b) for(int i=(a);i<=(b);i++)
#define furr(i,a,b) for(int i=(a);i>=(b);i--)
#define cl(a) memset((a),0,sizeof(a))
using namespace std;
typedef long long LL;
//----------------------------------------------------
int numb[305];
int A(int n)
{
    int t;
    t = n*(n - 1);
    return t;
}

int main()
{
    //freopen("E:\\data.in", "r", stdin);
    ios :: sync_with_stdio(false);
    int T;
    scanf("%d", &T);
    while (T--)
    {
        cl(numb);
        int n;
        int t;
        scanf("%d", &n);
        fur(i, 1, n) {
            scanf("%d", &t);
            numb[t]++;
        }
        int fm = A(n);
        int fz = fm;
        fur(i, 1, 300)
            if (numb[i] > 1)
                fz = fz - A(numb[i]);
        double ans = 0.5*(double)fz / (double)fm;
        printf("%.6lf\n",ans);

    }
    return 0;
}


你可能感兴趣的:(数学)