def main(): import sys input = sys.stdin.read().split() idx = 0 n = int(input[idx]) idx += 1 m = int(input[idx]) idx += 1 c = list(map(int, input[idx:idx + (n-2)])) if n > 2 else [] idx += (n-2) def get_j(i, k): total = i + k if total <= n: return total else: t = total - n cycle = 2 * (n - 1) if cycle == 0: return n r = t % cycle if r == 0: return n elif r <= n - 1: return n - r else: return r - (n - 1) + 1 epsilon = 1e-12 max_iter = 1000000 # Initialize DP tables prev_dpA = [0.0] * (n + 1) prev_dpB = [0.0] * (n + 1) for _ in range(max_iter): new_dpA = [0.0] * (n + 1) new_dpB = [0.0] * (n + 1) for i in range(1, n): # Compute dpB[i] sum_b = 0.0 for k in range(1, m + 1): j = get_j(i, k) cost_j = c[j - 2] if 2 <= j <= n - 1 else 0.0 sum_b += cost_j + prev_dpB[j] new_dpB[i] = sum_b / m # Compute dpA[i] sum_a = 0.0 min_magic = float('inf') for k in range(1, m + 1): j = get_j(i, k) cost_j = c[j - 2] if 2 <= j <= n - 1 else 0.0 sum_a += cost_j + prev_dpA[j] current = cost_j + prev_dpB[j] if current < min_magic: min_magic = current e_normal = sum_a / m e_magic = min_magic new_dpA[i] = min(e_normal, e_magic) new_dpA[n] = 0.0 new_dpB[n] = 0.0 max_diff = 0.0 for i in range(1, n + 1): max_diff = max(max_diff, abs(new_dpA[i] - prev_dpA[i])) max_diff = max(max_diff, abs(new_dpB[i] - prev_dpB[i])) if max_diff < epsilon: break prev_dpA, prev_dpB = new_dpA, new_dpB print("{0:.10f}".format(prev_dpA[1])) if __name__ == "__main__": main()