poj1723

这是一个中规中矩的排序题,只要想清楚中位数的作用即可。

前言

相信大家中学时代一定都做过许多与绝对值相关的数学题,那么其实本题求的是距离,距离是什么??反映到数学上,不就是绝对值吗??

对于一个数列,其各点到此数列的中位数处的距离之和是最短的,这个我们初中就会。

因此,分别对两个数列进行排序对于纵坐标,直接求出各点到中位数处的距离即可。对于横坐标,我们假设所选取的最终基准点第一点为position,那么,所要求的距离即为abs(position+i-x【i】)即可。。即为,(position+(x【i】-i))这样我们构造一个新的数组z【i】=x【i】-i;显然,position为z【i】中位数时所要求的x轴上的路径最短,两者加和


以下为我AC的代码

#include
#include
#include
#include
using namespace std;
#define size 10004                         //here need't a";"
int main()
{
    int x[size];
    int y[size];
    int n;
    cin>>n;
    for(int i=0;i     {
       cin>>x[i];
       cin>>y[i];
    }
    sort(x,x+n);
    sort(y,y+n);
    int middle=(n+1)/2-1;
    for(int i=0;i     {
        x[i]-=i;
    }
    sort(x,x+n);
    int length=0;
    for(int i=0;i     {
        length+=(abs(x[i]-x[middle])+abs(y[i]-y[middle]));
    }
    cout<         return 0;
}



这其中#include 是包含了STL头文件,更多关于此头文件用法可以参阅

http://www.cplusplus.com/reference/algorithm/ 
 
  

祝你好运。。。。。。。。

你可能感兴趣的:(algorithm,ini,考研机试OJ基础)