NYOJ水題--最短街區問題

雖然本題是水題,但是第一眼看到確實沒思路的,還以爲是橫縱座標的均值點就是電站位置呢。後來看了一博客,頓悟了。

代碼如下:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define max 25
using namespace std;
int xx[max],yy[max];
bool cmp(int i,int j)
{
    return i<j;
}

int main()
{
    int t,n,sum;
    scanf("%d",&t);
    for(int i=0;i<t;i++)
    {
        scanf("%d",&n);
        for(int j=0;j<n;j++)
         scanf("%d%d",xx+j,yy+j);
        sort(xx,xx+n,cmp);
        sort(yy,yy+n,cmp);
        sum=0;
        for(int j=0;j<n/2;j++)
          sum+=xx[n-1-j]-xx[j]+yy[n-1-j]-yy[j];
        printf("%d\n",sum);
    }
return 0;
}

既然是隻能走街道,也就是橫縱座標之間是沒關係的,將所有點橫縱座標分開並排序。因爲要使得總距離最短,那麼用戶的位置就要平均坐落在電站的兩側。

那麼橫座標在最中間的那些點就是電站的橫座標位置,縱座標在最中間的那些點就是電站的縱座標。當然,本題沒那麼複雜,因此只需求出總長度即可!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章