func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( Ofast,unroll-loops,fast-math )   using namespace std;   const int MAXN = 102, K = 900;   int n, m, k, u, v, x, y, t, a, b;   int A[MAXN];   short F1[MAXN][MAXN][2 * MAXN];   short F2[MAXN][MAXN][2 * MAXN];   short F3[MAXN][MAXN][2 * MAXN];   double dp[2][MAXN][MAXN];   int C(int x) { return x * (x + 1) / 2; }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n >> k;     k = min(k, K);     for (int i = 0; i < n; i++) cin >> A[i];     for (int l = 0; l < n; l++)       for (int r = l; r < n; r++) {         for (int i = 0; i < n; i++)           for (int j = i + 1; j < n; j++) {             bool ii = (l <= i && i <= r);             bool jj = (l <= j && j <= r);             if (ii && !jj) F1[i][j][l + r]++;             if (!ii && jj) F2[i][j][l + r]++;             if (ii && jj) F3[i][j][l + r]++;           }       }     int prev = 0, curr = 1;     for (int i = 0; i < n; i++)       for (int j = 0; j < i; j++) dp[0][i][j] = 1;     for (int x = 1; x <= k; x++) {       for (int i = 0; i < n; i++)         for (int j = i + 1; j < n; j++) {           dp[curr][i][j] = (C(i) + C(j - i - 1) + C(n - j - 1)) * dp[prev][i][j];           for (int cent = i; cent < n + i; cent++)             dp[curr][i][j] += F1[i][j][cent] * dp[prev][cent - i][j];           for (int cent = j; cent < n + j; cent++)             dp[curr][i][j] += F2[i][j][cent] * dp[prev][i][cent - j];           for (int cent = j; cent < n + i; cent++)             dp[curr][i][j] += F3[i][j][cent] * dp[prev][cent - i][cent - j];           dp[curr][i][j] /= C(n);           dp[curr][j][i] = 1. - dp[curr][i][j];         }       swap(prev, curr);     }     double ans = 0;     for (int i = 0; i < n; i++)       for (int j = 0; j < n; j++)         if (A[i] < A[j]) ans += dp[prev][i][j];     cout << setprecision(12) << fixed << ans <<   n ;     return 0;   }   