/* -*- coding: utf-8 -*- * * 1478.cc: No.1478 Simple Sugoroku - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_M = 100000; const int CNT = 50; /* typedef */ /* global variables */ int bs[MAX_M + 1]; double es[MAX_M + 1]; /* subroutines */ double check(int n, int m, double s) { es[m] = 0.0; double d = 1 + s / m, sum = 0.0; for (int i = m - 1; i >= 0; i--) { es[i] = min(d, es[i + 1] + bs[i + 1] - bs[i]); sum += es[i]; } return sum; } /* main */ int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) scanf("%d", bs + i); bs[m] = n; /* e_i=min(1.0+sum ej/m, di+e_{i+1}) */ double s0 = 0.0, s1 = (double)n * m; for (int cnt = 0; cnt < CNT; cnt++) { double s = (s0 + s1) / 2; if (check(n, m, s) <= s) s1 = s; else s0 = s; } check(n, m, s1); printf("%.10lf\n", es[0] + bs[0] - 1); return 0; }