110401 Vito's Family

来源:互联网 发布:北京公司网络建设 编辑:程序博客网 时间:2024/05/17 23:56


#include <iostream>#include <vector>using namespace std;#define ABS(x) (((x) < 0) ? -(x) : (x))template <typename T>static void Swap(T* data, int x, int y){if (x == y)return;T temp = *(data + x);*(data + x) = *(data + y);*(data + y) = temp;}template <typename T, typename GreaterThanFunc>static int Partition(T* data, int left, int right, GreaterThanFunc greaterThan){const T& reference = *(data + right);int lastSmallerThanRef = left - 1;for (int i = left; i <= (right - 1); ++i){if (greaterThan(reference, *(data + i))){++lastSmallerThanRef;Swap(data, lastSmallerThanRef, i);}}++lastSmallerThanRef;Swap(data, lastSmallerThanRef, right);return lastSmallerThanRef;}template <typename T, typename GreaterThanFunc>static void QuickSort(T* data, int left, int right, GreaterThanFunc greaterThan){if (left >= right)return;if ((right - left) == 1){if (greaterThan(*(data + left), *(data + right)))Swap(data, left, right);return;}int mid = Partition(data, left, right, greaterThan);QuickSort(data, left, mid - 1, greaterThan);QuickSort(data, mid + 1, right, greaterThan);}template <typename T>class Comparer{public:bool operator()(const T& a, const T& b){return (a > b);}};static void OutputDistance(int* houses, int cnt){QuickSort(houses, 0, cnt - 1, Comparer<int>());int chosen = houses[cnt / 2];int sum = 0;for (int i = 0; i < cnt; ++i){int dist = houses[i] - chosen;sum += ABS(dist);}cout << sum << endl;}static void Run(){int cnt;cin >> cnt;int* houses = new int[cnt];for (int i = 0; i < cnt; ++i)cin >> houses[i];OutputDistance(houses, cnt);delete[] houses;}static void Test(){int testCnt = 0;cin >> testCnt;for (int i = 0; i < testCnt; ++i)Run();}int main(int argc, char* argv[]){Test();return 0;}


原创粉丝点击