您的位置:首页 > 其它

HDU 5645 DZY Loves Balls(概率)

2016-03-29 16:44 190 查看

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



[align=left]Problem Description[/align]
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.

[align=left]Input[/align]
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

)

[align=left]Output[/align]
For each testcase, output a real number with 6 decimal places.

[align=left]Sample Input[/align]

2
3
1 2 3
3
100 100 100


[align=left]Sample Output[/align]

0.500000
0.000000

[code]/*
思路:对求号码进行排序
取两次球第一次不放回,所有可能的情况为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
;
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;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: