#include <cmath>
#include <cstdio>
#include <math.h>
#include <climits>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int t;
int n, arr[N], T;
double Time[N][2];
int main()
{
cin >> t;
while (t--)
{
cin >> n;
cin >> arr[n + 1];
for (int i = 1; i <= n; i++)
cin >> arr[i];
Time[n + 1][1] = 0;
for (int i = 1; i <= n + 1; i++)
Time[i][0] = Time[i - 1][0] + (arr[i] - arr[i - 1]) * 1.0 / i;
for (int i = n; i >= 0; i--)
Time[i][1] = Time[i + 1][1] + (arr[i + 1] - arr[i]) * 1.0 / (n - i + 1);
T = -1;
for (int i = 0; i <= n; i++)
if (Time[i][0] <= Time[i][1] && Time[i + 1][0] >= Time[i][1])
{
T = i;
break;
}
double ans;
if (Time[T][0] >= Time[T + 1][1])
{
double S = arr[T + 1] - arr[T];
S -= (Time[T][0] - Time[T + 1][1]) * (n - T + 1) * 1.0;
ans = Time[T][0] + S * 1.0 / (n + 2);
}
else
{
double S = arr[T + 1] - arr[T];
S -= (Time[T + 1][1] - Time[T][0]) * (T + 1);
ans = Time[T + 1][1] + S / (n + 2);
}
printf("%.10lf\n", ans);
}
system("pause");
}
题解 https://www.luogu.com.cn/blog/dream-of-Au/solution-cf1408c