Advertisement
Guest User

Untitled

a guest
Feb 14th, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define rep(i, a) for (int i = 0; i < (a); i++)
  4. #define rep2(i, a, b) for (int i = (a); i < (b); i++)
  5. #define repr(i, a) for (int i = (a) - 1; i >= 0; i--)
  6. #define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--)
  7. template<class T1, class T2> bool chmin(T1 &a, T2 b) { return b < a && (a = b, true); }
  8. template<class T1, class T2> bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); }
  9. typedef long long ll;
  10.  
  11. int main() {
  12. int n;
  13. cin >> n;
  14. vector<int> a(n);
  15. rep(i, n) cin >> a[i];
  16. sort(a.begin(), a.end());
  17.  
  18. vector<ll> d(5050);
  19. rep(i, n) rep(j, n) if (a[i] > a[j]) d[a[i] - a[j]]++;
  20.  
  21. static ll dp[3][5050];
  22. dp[0][0] = 1;
  23. rep(i, 5050) for (int j = 0; i + j < 5050; j++) dp[1][i + j] += dp[0][j] * d[i];
  24. rep(i, 5050) for (int j = 0; i + j < 5050; j++) dp[2][i + j] += dp[1][j] * d[i];
  25.  
  26. long double whole = powl(n, 3) * powl(n - 1, 3) / 8;
  27. repr(i, 5050 - 1) d[i] += d[i + 1];
  28. ll way = 0;
  29. for (int j = 1; j < 5050 - 1; j++) way += dp[2][j] * d[j + 1];
  30.  
  31. long double ans = (long double)way / whole;
  32. printf("%.20f\n", (double)ans);
  33.  
  34. return 0;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement