poj1723 排序+中位数
2014-03-12 08:18
218 查看
/** * poj1723 * 排序+中位数 * 目的纵坐标很容易想到是中位数,其实横坐标也一样 * 如果目的x坐标是a,a+1,a+2,那么移动步数应该是sum(|x[i] - a - i|) * 那么a是x[i] - i的中位数就可以了 * 不用担心步数重复的问题;合理安排顺序一定可以保证步数够用,所有绕远都可以通过改变顺序的方法解决 */ #include <iostream> #include <stdlib.h> using namespace std; int abs(const int x, const int y){ return (x > y) ? x-y : y-x; } int cmp(const void* a,const void* b){return *((int*)a)-*((int*)b);} int x[10001],y[10001],xx[10001]; int main(){ int n,count = 0,dest_x,dest_y; cin >> n; for(int i=0;i<n;++i){ cin >> x[i] >> y[i]; } qsort(y,n,sizeof(int),cmp); dest_y = y[n/2]; qsort(x,n,sizeof(int),cmp); for(int i=0;i<n;++i){ xx[i] = x[i] - i; } qsort(xx,n,sizeof(int),cmp); dest_x = xx[n/2]; //cout << dest_x << " " << dest_y << endl; for(int i=0;i<n;++i){ count += abs(xx[i],dest_x); count += abs(y[i],dest_y); } cout << count << endl; return 0; }
相关文章推荐
- POJ1723 SOLDIERS【中位数+排序】
- POJ1723 SOLDIERS【中位数+排序】
- POJ - 1723 Soldiers 士兵站队 排序+中位数
- poj 1723 中位数
- poj 1723 SOLDIERS 中位数
- poj 2388 Who's in the Middle(快速排序求中位数)
- poj 1723 SOLDIERS 中位数
- 算法导论_中位数与带权中位数。poj 1723
- POJ 2388 Who's in the Middle(水~奇数个数排序求中位数)
- POJ 2388:Who's in the Middle:快速排序思想求解中位数
- poj 1723 求中位数(让士兵站成一排)
- POJ-1723 中位数
- POJ 1723 SOLDIERS 【排序】
- poj 1723 Soldiers【中位数】By cellur925
- poj 1723 中位数
- POJ 1723 SOLDIERS (中位数)
- poj1723(排序)
- poj 2388 Who's in the Middle(快速排序求中位数)
- poj 2388 Who's in the Middle(快速排序求中位数)
- leetcode题目 寻找两个排序数组的中位数