#define _GLIBCXX_DEBUG #include #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define all(v) begin(v), end(v) using namespace std; using ll = long long int; vector> MakeCombination(int n, int k) { vector> ret; vector temp = {0}; auto f = [&](auto f, int i, int m) -> void { if (m == k) { temp.push_back(n); ret.push_back(temp); temp.pop_back(); } else { for (int j = i + 1; j <= n - k + m; j++) { temp.push_back(j); f(f, j, m + 1); temp.pop_back(); } } }; f(f, 0, 0); return ret; } int main() { // 入力 int N, K; cin >> N >> K; vector n(N); rep(i, N) cin >> n[i]; // 分け方の全探索 vector> pat = MakeCombination(N, K - 1); int MaxAveDiff = 0; vector v(N); rep(i, N) v[i] = i; do { for (auto w : pat) { // 各組の平均点と平均の差の最大値 vector score(K, 0); double MaxAve = 0, MinAve = 10000; rep(i, K) { for (int j = w[i]; j < w[i + 1]; j++) score[i] += n[v[j]]; score[i] /= (w[i + 1] - w[i]); MaxAve = max(MaxAve, score[i]); MinAve = min(MinAve, score[i]); } // 最大の平均の差の更新 MaxAveDiff = max(MaxAveDiff, (int)(MaxAve - MinAve + 0.9999)); } } while (next_permutation(all(v))); // 出力 cout << MaxAveDiff << endl; }