2 3 1 2 3 3 100 100 100
0.500000 0.000000
解:找出取出2个数相同的情况,所有情况减去这些的一半即满足的条件,除以C(N,2)即可。
AC代码:
//************************************************************************// //*Author : Handsome How *// //************************************************************************// //#pragma comment(linker, "/STA CK:1024000000,1024000000") #pragma warning(disable:4996) #include <vector> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <algorithm> #include <sstream> #include <iostream> #include <cstdio> #include <cmath> #include <cstdlib> #include <cstring> #include <ctime> #include <cassert> #if defined(_MSC_VER) || __cplusplus > 199711L #define aut(r,v) auto r = (v) #else #define aut(r,v) __typeof(v) r = (v) #endif #define each(it,o) for(aut(it, (o).begin()); it != (o).end(); ++ it) #define fur(i,a,b) for(int i=(a);i<=(b);i++) #define furr(i,a,b) for(int i=(a);i>=(b);i--) #define cl(a) memset((a),0,sizeof(a)) using namespace std; typedef long long LL; //---------------------------------------------------- int numb[305]; int A(int n) { int t; t = n*(n - 1); return t; } int main() { //freopen("E:\\data.in", "r", stdin); ios :: sync_with_stdio(false); int T; scanf("%d", &T); while (T--) { cl(numb); int n; int t; scanf("%d", &n); fur(i, 1, n) { scanf("%d", &t); numb[t]++; } int fm = A(n); int fz = fm; fur(i, 1, 300) if (numb[i] > 1) fz = fz - A(numb[i]); double ans = 0.5*(double)fz / (double)fm; printf("%.6lf\n",ans); } return 0; }