Accepts: 612
Submissions: 1231
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 262144/262144 K (Java/Others)
问题描述
DZY喜欢玩球。
他有nn个球,装进一个大盒子里。每个球上面都写着一个整数。
有一天他打算从盒子中挑两个球出来。他先均匀随机地从盒子中挑出一个球,记为AA。他不把AA放回盒子,然后再从盒子中均匀随机地挑出一个球,记为BB。
如果AA上的数字严格大于BB上的数字,那么他就会感到愉悦。
现在告诉你每个球上的数字,请你求出他感到愉悦的概率是多少。
输入描述
第一行tt,表示有tt组数据。
接下来tt组数据。每组数据中,第一行包含一个整数nn,第二行包含nn个用空格隔开的正整数a_iai,表示球上的数字。
(1\le t\le 300, 2\le n \le 300,1\le a_i \le 3001≤t≤300,2≤n≤300,1≤ai≤300)
输出描述
对于每个数据,输出一个实数答案,保留6位小数。
输入样例
2
3
1 2 3
3
100 100 100
输出样例
0.500000
0.000000
不难的吧,看懂题就行了。(每次BC只能这么打,得多学习啊!)
代码如下:
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int u;
int n;
int a[333];
scanf ("%d",&u);
while (u--)
{
scanf ("%d",&n);
for (int i=1;i<=n;i++)
scanf ("%d",&a[i]);
sort (a+1,a+1+n,cmp);
int m = 0; //愉悦取球的方法数
for (int i=1;i<n;i++)
{
for (int j=i+1;j<=n;j++)
{
if (a[i] == a[j])
continue;
if (a[i] > a[j])
{
m += (n-j+1);
break;
}
}
}
double ans = (double)m/(double)(n*(n-1));
printf ("%.6lf\n",ans);
}
return 0;
}