DZY Loves Balls
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 661 Accepted Submission(s): 389
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
One day he decides to pick two balls from the box. First he randomly picks a ball from the box, and names it A
If the number written on A
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
a
i![]()
, denoting the numbers on the balls.
( 1≤t≤300,2≤n≤300,1≤a
i
≤300
)
t
( 1≤t≤300,2≤n≤300,1≤a
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/* 思路:对求号码进行排序 取两次球第一次不放回,所有可能的情况为n*(n-1),对于每一个球,枚举比他大的球的位置j, n-j即为比第一次球大的数目a,a/(n*(n-1)),即为每一次的概率,累加即为结果 */ #include <iostream> #include <algorithm> #include <cstdio> using namespace std; const int N=300+5; int a[N]; int main(){ int t,i,j,n; double re; cin>>t; while(t--){ cin>>n; re=0; for(i=0;i<n;i++) cin>>a[i]; sort(a,a+n); for(i=0;i<n;i++){ //枚举每一个球 for(j=i+1;j<n;j++){ //找到比第一个球大的位置 if(a[i]<a[j]){ break; } } re+=(double)(n-j)/(n*(n-1)); } printf("%.6lf\n",re); } return 0; }