func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 2e3;   int n, h, aa[N + 2], vis[2][N + 1][N + 1][2];   double p, dp[2][N + 1][N + 1][2];   double dfs(int s1, int lo, int hi, int s2) {     if (vis[s1][lo][hi][s2]) return dp[s1][lo][hi][s2];     vis[s1][lo][hi][s2] = 1;     if (lo > hi) return 0;     double here = 0;     int em;     if (s1 == 0)       em = min(aa[lo] - aa[lo - 1], h);     else       em = min(aa[lo] - aa[lo - 1] - h, h);     here += 0.5 * p * em + 0.5 * p * dfs(0, lo + 1, hi, s2);     em = aa[lo] + h;     int i;     for (i = lo + 1; i <= hi; i++) {       if (aa[i] >= em) break;       em = aa[i] + h;     }     if (i > hi) {       if (s2 == 1)         em = min(em, aa[hi + 1]);       else         em = min(em, aa[hi + 1] - h);     }     em -= aa[lo];     here += 0.5 * (1.0 - p) * em + 0.5 * (1.0 - p) * dfs(1, i, hi, s2);     if (s2 == 1)       em = min(aa[hi + 1] - aa[hi], h);     else       em = min(aa[hi + 1] - aa[hi] - h, h);     here += 0.5 * (1.0 - p) * em + 0.5 * (1.0 - p) * dfs(s1, lo, hi - 1, 1);     em = aa[hi] - h;     for (i = hi - 1; i >= lo; i--) {       if (aa[i] <= em) break;       em = aa[i] - h;     }     if (i < lo) {       if (s1 == 0)         em = max(em, aa[lo - 1]);       else         em = max(em, aa[lo - 1] + h);     }     em = aa[hi] - em;     here += 0.5 * p * em + 0.5 * p * dfs(s1, lo, i, 0);     return dp[s1][lo][hi][s2] = here;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cin >> n >> h >> p;     for (int i = 1; i <= n; i++) cin >> aa[i];     sort(aa + 1, aa + n + 1);     aa[0] = -1e9, aa[n + 1] = 1e9;     cout << setprecision(9) << fixed << dfs(0, 1, n, 1) << endl;     return 0;   }   