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.
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.
( 1≤t≤300,2≤n≤300,1≤ai≤300 )
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.
( 1≤t≤300,2≤n≤300,1≤ai≤300 )
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个数相同的情况,所有情况减去这些的一半即满足的条件,除以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;
}