一个排序好的数组中位于中间的数到其他的数的总和总是最小的,所以根据这个就可以写了。
#include#include #include #define MAXD 505 using namespace std; int a[MAXD]; int main() { int cas, r; scanf( "%d", &cas); while( cas --) { scanf( "%d", &r); for( int i = 0; i < r; i ++) scanf( "%d", &a[i]); sort( a, a + r); int mid = (r - 1) >> 1, s = 0; for( int i = 0; i < r; i ++) s += abs( a[i] - a[ mid ]); printf( "%d\n", s); } return 0; }