【BC-2016.3.19】DZY Loves Balls(水)

DZY Loves Balls

 
 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 3001t300,2n300,1ai300)
输出描述
对于每个数据,输出一个实数答案,保留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;
}


你可能感兴趣的:(【BC-2016.3.19】DZY Loves Balls(水))