UVa 10041 - Vito's Family
2012-08-17 01:04
363 查看
【链接】
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=113&page=show_problem&problem=982
【原题】
find a house close to them.
For each test case you will be given the integer number of relatives r ( 0 < r < 500) and the street numbers (also integers)
![](http://uva.onlinejudge.org/external/100/10041img1.gif)
where
they live ( 0 < si < 30000 ). Note that several relatives could live in the same street number.
|si-sj|.
【题目大意】
一个黑社会老大要搬家到纽约的某一条街上, 他在那条街上有很多的亲戚朋友,要找到一个地方,使得这个地方走到所有亲戚朋友家的总距离最短。
【分析与总结】
赤裸裸的找中位数就OK了...
【代码】
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 tofind 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://uva.onlinejudge.org/external/100/10041img1.gif)
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; }
—— 生命的意义,在于赋予它意义。 原创 http://blog.csdn.net/shuangde800 , By D_Double (转载请标明)
相关文章推荐
- UVa 10041 - Vito's Family
- UVa 10041 - Vito's Family
- UVa 10041 - Vito's Family
- PC/UVa 题号:110401/10041 Vito's Family
- uva 10041 Vito's Family
- UVA10041 - Vito's family
- 排序 UVA 10041 Vito's Family
- uva 10041 Vito's Family_贪心
- UVA 10041 Vito's Family 求中位数 模拟
- uva10041 - Vito's Family(求中位数)
- UVA - 10041 Vito's Family 求中位数
- 第K小数 uva 10041 - Vito's Family poj 2388 Who's in the Middle
- 10041 - Vito's Family
- UVA - 10041 Vito's Family(贪心)
- UVa Problem Solution: 10041 - Vito's Family
- uva - 10041 - Vito's Family(数学)
- UVa 10041 Vito's Family (中位数&快速选择)
- uva 10041 Vito's Family(检索)
- UVa10041:Vito's family
- uva10041 Vito's Family