#include <algorithm>
#define _USE_MATH_DEFINES
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define stoi stoll
#define YES cout<<"YES"<<endl
#define NO cout<<"NO"<<endl
#define Yes cout<<"Yes"<<endl
#define No cout<<"No"<<endl
#define yes cout<<"yes"<<endl
#define no cout<<"no"<<endl
#define all(a) a.begin(),a.end()
#define SORT(a) sort(all(a))
#define REVERSE(a) reverse(all(a))
#define REP(i, n) for(int i = 0;i < n;i++)
#define REPR(i, n) for(int i = n;i >= 0;i--)
#define FOR(i, m, n) for(int i = m;i < n;i++)
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef long long ll;
const int MOD=1000000007;
const long long INF = 1LL << 60;
const double PI = acos(-1.0);
const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
/*最大公約数*/int GCD(int a, int b) { return b ? GCD(b, a%b) : a; }
/*最小公倍数*/int LCM(int a, int b) { int g = GCD(a, b); return a / g * b; }
/*素数判定*/int isPrime(int n){if(n<2){return 0;}for(int i=2; i*i<=n; i++){if(n%i==0){return 0;}}return 1;}
/*素因数分解*/map< int64_t, int > prime_factor(int64_t n) {map< int64_t, int > ret;for(int64_t i = 2; i * i <= n; i++) {while(n % i == 0) {ret[i]++;n /= i;}}if(n != 1) ret[n] = 1;return ret;}
/*約数列挙*/vector<int> getDivisor(int n){vector<int> v; for(int i=1; i*i<=n; i++){if(n%i==0){v.push_back(i);if(i!=n/i){v.push_back(n/i);}}}sort(v.begin(),v.end()); return v;}
/*各桁の和*/int findSumOfDigits(int n) {int sum = 0;while (n > 0) {sum += n % 10;n /= 10;}return sum;}
/*桁数*/int GetDigit(int num){int digit=0;while(num!=0){num /= 10;digit++;}return digit;}
/*転倒数*/ll merge_cnt(vector<int> &a) {int n = a.size();if (n <= 1) { return 0; }ll cnt = 0;vector<int> b(a.begin(), a.begin()+n/2);vector<int> c(a.begin()+n/2, a.end());cnt += merge_cnt(b);cnt += merge_cnt(c);int ai = 0, bi = 0, ci = 0;/* merge の処理*/while (ai < n) {if ( bi < b.size() && (ci == c.size() || b[bi] <= c[ci]) ) {a[ai++] = b[bi++];} else {cnt += n / 2 - bi;a[ai++] = c[ci++];}}return cnt;}
/*等差数列判定*/bool isSequence(vector<int> v){int d = v[1] -v[0];for ( int i = 1; i < v.size(); i++ ){if ( v[i] -v[i-1] != d ) return false;}return true;}
/*A_0 = 1, A_1 = 1 のフィボナッチ数列 A_n の n番目の値を返す関数*/int Fib (int n){if ( n == 0 ) return 1;if ( n == 1 ) return 1;return Fib (n - 1) + Fib (n - 2);}
vector<pair<long long, long long> > prime_factorize(long long n) {vector<pair<long long, long long> > res;for (long long p = 2; p * p <= n; ++p) {if (n % p != 0) continue;int num = 0;while (n % p == 0) { ++num; n /= p; }res.push_back(make_pair(p, num));}if (n != 1) res.push_back(make_pair(n, 1));return res;}
long long ctoll(const char c){switch(c){case '0': return 0;case '1': return 1;case '2': return 2;case '3': return 3;case '4': return 4;case '5': return 5;case '6': return 6;case '7': return 7;case '8': return 8;case '9': return 9;default : return -1;}}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout<<fixed<<setprecision(15);

    int N, K; cin >> N >> K;
    vector<double> p(N); REP(i, N) {
        int w; cin >> w;
        p[i] = (w + 1) / 2.0;
    }
    double ans=0.0;
    double answ=0.0;
    REP(i, N - K + 1) { 
        if(i == 0) {
            for(int j = 0; j < K; j++) {
                answ += p[j];
            } 
        } else {
            answ = answ - p[i - 1] + p[i + K - 1];
        }
        if(answ > ans) {ans = answ;}
    }
  	cout << ans << endl;
    return 0;
}


Measured memory_bytes: 1792