//全部試して一番良いものを取る #include using namespace std; int pwd( int a, int n ){ if( n == 0 ) return 1; return a * pwd(a, n - 1); } int n; int k; int c[9]; int main() { int i, j; cin >> n >> k; for( int i = 0; i < n; i++ ) cin >> c[i]; int ans = 0; //n桁のk進数で振り分け方を列挙 for( i = 0; i < pwd(k, n); i++ ){ int groupSz[9] = {0}; int groupSum[9] = {0}; for( j = 0; j < n; j++ ){ int groupInd = (i / pwd(k, j)) % k; groupSz[groupInd]++; groupSum[groupInd] += c[j]; } for( j = 0; j < k; j++ ){ if( groupSz[j] == 0 ) break; } if( j < k ) continue; double mini = (double)groupSum[0] / groupSz[0]; double maxi = (double)groupSum[0] / groupSz[0]; for( j = 0; j < k; j++ ){ mini = min( mini, (double)groupSum[j] / groupSz[j] ); maxi = max( maxi, (double)groupSum[j] / groupSz[j] ); } ans = max(ans, (int)(maxi - mini) ); } cout << ans << endl; return 0; }