#include #include using namespace std; int main() { //nacitani vstupu int N, K, moveDist = 0, middle, dist; cin >> N >> K; int * array = new int[N]; for(int i = 0; i != N; i++) { cin >> array[i]; } //serazeni sort(array, array + N); //posuny if(N % 2 == 1) { middle = array[N/2]; dist = 1; //udava vzdalenost od stredu v poctu pitek //posuny smerem doprava u pitek blize for(int i = N/2 - 1; i >= 0; --i) { moveDist += abs(array[i] - (middle - dist * K)); //cout << "-i: " << i << ", movedist: " << moveDist << endl; //cout << "middle - dist * K: " << middle - dist * K << endl; //cout << "array[i] - (middle - dist * K): " << array[i] - (middle - dist * K) << endl; ++dist; } dist = 1; for(int i = N/2 + 1; i != N; ++i) { moveDist += abs(array[i] - (middle + dist * K)); //cout << "+i: " << i << ", movedist: " << moveDist << endl; ++dist; } } else { middle = array[N/2 - 1]; dist = 1; //udava vzdalenost od stredu v poctu pitek //posuny smerem doprava u pitek blize for(int i = N/2 - 2; i >= 0; --i) { moveDist += abs(array[i] - (middle - dist * K)); //cout << "-i: " << i << ", movedist: " << moveDist << endl; //cout << "middle - dist * K: " << middle - dist * K << endl; //cout << "array[i] - (middle - dist * K): " << array[i] - (middle - dist * K) << endl; ++dist; } dist = 1; for(int i = N/2; i != N; ++i) { moveDist += abs(array[i] - (middle + dist * K)); //cout << "+i: " << i << ", movedist: " << moveDist << endl; ++dist; } } cout << moveDist << endl; delete[] array; return 0; }