【链接】
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=982
【原题】
Background
The world-known gangster Vito Deadstone is moving to New York. He has a very big family there, all of them living in Lamafia Avenue. Since he will visit all his relatives very often, he is trying to find a house close to them.
Problem
Vito wants to minimize the total distance to all of them and has blackmailed you to write a program that solves his problem.
Input
The input consists of several test cases. The first line contains the number of test cases.
For each test case you will be given the integer number of relatives r ( 0 < r < 500) and the street numbers (also integers)
本栏目更多精彩内容:http://www.bianceng.cn/Programming/sjjg/
where they live ( 0 < si < 30000 ). Note that several relatives could live in the same street number.
Output
For each test case your program must write the minimal sum of distances from the optimal Vito's house to each one of his relatives. The distance between two street numbers si and sj is dij= |si-sj|.
Sample Input
2 2 2 4 3 2 4 6
Sample Output
2 4
【题目大意】
一个黑社会老大要搬家到纽约的某一条街上, 他在那条街上有很多的亲戚朋友,要找到一个地方,使得这个地方走到所有亲戚朋友家的总距离最短。
【分析与总结】
赤裸裸的找中位数就OK了...
【代码】
/* * UVa: 10041 Vito's Family * Time: 0.024s * Author: D_Double * */ #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #define MAXN 510 using namespace std; int arr[MAXN], n; void solve(){ sort(arr, arr+n); if(n&1){ //如果是奇数,一定是正中间那个数 int mid=arr[(n-1)>>1]; int sum=0; for(int i=0; i<n; ++i) sum += abs(arr[i]-mid); printf("%d\n",sum); } else{ //如果是偶数,那么是中间两个之和的一半 int mid=(arr[(n-2)>>1]+arr[n>>1])/2; int sum=0; for(int i=0; i<n; ++i) sum += abs(arr[i]-mid); printf("%d\n", sum); } } int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); for(int i=0; i<n; ++i) scanf("%d",&arr[i]); solve(); } return 0; }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, include
, number
, test
, arr
The
font family、family、modern family、family name、my family 英语作文,以便于您获取更多的相关知识。