雖然本題是水題,但是第一眼看到確實沒思路的,還以爲是橫縱座標的均值點就是電站位置呢。後來看了一博客,頓悟了。
代碼如下:
#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;
}
既然是隻能走街道,也就是橫縱座標之間是沒關係的,將所有點橫縱座標分開並排序。因爲要使得總距離最短,那麼用戶的位置就要平均坐落在電站的兩側。
那麼橫座標在最中間的那些點就是電站的橫座標位置,縱座標在最中間的那些點就是電站的縱座標。當然,本題沒那麼複雜,因此只需求出總長度即可!