DZY Loves Balls
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 324 Accepted Submission(s): 198
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
题意:有n个球,放在一个箱子里,球的编号为1~n,先后无放回的挑出两个球为球A和球B,问A的编号严格大于球B的概率是多少?
题解:给n个球的编号排序,找出球A大于球B的情况数目,再除以总情况n*(n-1)。
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[310];
int main()
{
int t,n,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;++i)
scanf("%d",&a[i]);
sort(a,a+n);
int num,cnt=0;
for(i=n-1;i>=0;--i)
{
for(j=i-1;j>=0;--j)
{
if(a[j]!=a[i])
{
cnt+=(j+1);
break;
}
}
}
num=n*(n-1);
double ans=(cnt*1.0)/(num*1.0);
printf("%0.6lf\n",ans);
}
return 0;
}