Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define rep(i, a) for (int i = 0; i < (a); i++)
- #define rep2(i, a, b) for (int i = (a); i < (b); i++)
- #define repr(i, a) for (int i = (a) - 1; i >= 0; i--)
- #define repr2(i, a, b) for (int i = (b) - 1; i >= (a); i--)
- template<class T1, class T2> bool chmin(T1 &a, T2 b) { return b < a && (a = b, true); }
- template<class T1, class T2> bool chmax(T1 &a, T2 b) { return a < b && (a = b, true); }
- typedef long long ll;
- int main() {
- int n;
- cin >> n;
- vector<int> a(n);
- rep(i, n) cin >> a[i];
- sort(a.begin(), a.end());
- vector<ll> d(5050);
- rep(i, n) rep(j, n) if (a[i] > a[j]) d[a[i] - a[j]]++;
- static ll dp[3][5050];
- dp[0][0] = 1;
- rep(i, 5050) for (int j = 0; i + j < 5050; j++) dp[1][i + j] += dp[0][j] * d[i];
- rep(i, 5050) for (int j = 0; i + j < 5050; j++) dp[2][i + j] += dp[1][j] * d[i];
- long double whole = powl(n, 3) * powl(n - 1, 3) / 8;
- repr(i, 5050 - 1) d[i] += d[i + 1];
- ll way = 0;
- for (int j = 1; j < 5050 - 1; j++) way += dp[2][j] * d[j + 1];
- long double ans = (long double)way / whole;
- printf("%.20f\n", (double)ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement