|
| 1 | +#include <bits/stdc++.h> |
| 2 | +#include <string.h> |
| 3 | +#define int long long |
| 4 | +#define MAX (int)(1e7+5) |
| 5 | +#define MAX2D (int)(1e3+5) |
| 6 | +#define itn int |
| 7 | +#define inf 5e18 |
| 8 | +#define MOD (int)(1e9 + 7) |
| 9 | +#define pb push_back |
| 10 | +#define mk make_pair |
| 11 | +#define all(x) x.begin(), x.end() |
| 12 | +#define rall(x) x.rbegin(),x.rend() |
| 13 | +#define pii pair<int, int> |
| 14 | +#define vii vector<pii> |
| 15 | +#define vi vector<int> |
| 16 | +#define vll vector<unsigned int> |
| 17 | +#define test \ |
| 18 | + int t; \ |
| 19 | + cin >> t; \ |
| 20 | + while (t--) |
| 21 | +#define fast \ |
| 22 | + ios_base ::sync_with_stdio(0); \ |
| 23 | + cin.tie(NULL); \ |
| 24 | + cout.tie(NULL) |
| 25 | +using namespace std; |
| 26 | + |
| 27 | +int n,L; |
| 28 | +const int N = 1e5+1; |
| 29 | +vector<double> a(N); |
| 30 | +double eps = 1e-6; |
| 31 | + |
| 32 | +bool good(double m) { |
| 33 | + double t1 = m, t2 = m; |
| 34 | + double speed1 = 1, speed2 = 1; |
| 35 | + double pos1 = 0, pos2 = L; |
| 36 | + for(int i=1;i<=n+1;i++) { |
| 37 | + if(speed1*t1*1.0f >= 1.0f*((a[i]-a[i-1]))) pos1 += 1.0f*(a[i]-a[i-1]), t1 -= (1.0f*(a[i]-a[i-1]))/speed1, speed1++; |
| 38 | + else pos1 += 1.0f*speed1*t1, t1 = 0; |
| 39 | + t1 = max(t1, (double)0); |
| 40 | + } |
| 41 | + for(int i=n;i>=0;i--) { |
| 42 | + if(speed2*t2*1.0f >= 1.0f*(a[i+1]-a[i])) pos2 -= 1.0f*(a[i+1]-a[i]), t2 -= (1.0f*(a[i+1]-a[i]))/speed2, speed2++; |
| 43 | + else pos2 -= 1.0f*speed2*t2, t2 = 0; |
| 44 | + t2 = max(t2, (double)0); |
| 45 | + } |
| 46 | + if((pos2-pos1) <= 0.00001) return true; |
| 47 | + return false; |
| 48 | +} |
| 49 | + |
| 50 | +double f() { |
| 51 | + double l = 0, r = L; |
| 52 | + double ans = l; |
| 53 | + for(int i=0;i<200 && l+eps <= r;i++) { |
| 54 | + double mid = (l+r)*0.5f; |
| 55 | + if(good(mid)) ans = mid, r = mid; |
| 56 | + else l = mid; |
| 57 | + } |
| 58 | + return ans; |
| 59 | +} |
| 60 | +signed main() |
| 61 | +{ |
| 62 | + fast; |
| 63 | + test { |
| 64 | + cin>>n>>L; |
| 65 | + a.resize(n+2); |
| 66 | + for(int i=1;i<=n;i++) cin>>a[i]; |
| 67 | + a[0] = 0, a[n+1] = L; |
| 68 | + cout<<fixed<<setprecision(16); |
| 69 | + cout<<f()<<"\n"; |
| 70 | + } |
| 71 | + return 0; |
| 72 | +} |
0 commit comments