#include using namespace std; bool is_valid(double mid, int K, int N, const vector & As){ vector Bs(2 * N, 0); for (int i = 0; i < N; ++i) Bs[i] = As[i] - mid; for (int i = 0; i < N; ++i) Bs[N + i] = Bs[i]; vector Cs(2 * N + 1, 0); for (int i = 0; i < 2 * N; ++i) Cs[i + 1] = Cs[i] + Bs[i]; deque> window; for (int i = K; i <= N; ++i){ while ((not window.empty()) and window.back().first < Cs[i]) window.pop_back(); window.emplace_back(Cs[i], i); } if (window.front().first >= Cs[0]) return true; for (int i = 1; i < N; ++i){ if (window.front().second < K + i) window.pop_front(); while ((not window.empty()) and window.back().first < Cs[i + N]) window.pop_back(); window.emplace_back(Cs[i + N], i + N); if (window.front().first >= Cs[i]) return true; } return false; } double solve(int K, int N, const vector & As){ double eps = 1e-7; double OK = 0.0; double NG = 1.0 + eps; while (OK + eps < NG){ double mid = (OK + NG)/2.0; if (is_valid(mid, K, N, As)){ OK = mid; }else{ NG = mid; } } return OK; } int main() { cin.tie(0); ios::sync_with_stdio(false); int N, K; cin >> N >> K; string S; cin >> S; vector As(N, 0); for (int i = 0; i < N; ++i) As[i] = (double)(S[i] - '0'); cout.precision(8); cout << fixed << solve(K, N, As) << endl; return 0; }