程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 小程序 求解-這裡有一題ACM的小題目,求眾神解答。幫寫個程序。小弟冰天雪地裸奔哭嚎以示感謝!

小程序 求解-這裡有一題ACM的小題目,求眾神解答。幫寫個程序。小弟冰天雪地裸奔哭嚎以示感謝!

編輯:編程綜合問答
這裡有一題ACM的小題目,求眾神解答。幫寫個程序。小弟冰天雪地裸奔哭嚎以示感謝!

郵局選址:
在一個按照東西和南北方向劃分成規整街區的城市裡,n 個居民點散亂的分布在不同的街區中。用X坐標表示東西向,用Y坐標表示南北向,各居民點的位置可以有坐標(XY)表示。街區中任意2點(X1,Y1)和(X2,Y2)質檢的距離可以用數值丨X1-X2丨+丨Y1-Y2丨度量。居民們希望在城市中選擇建立郵局的最佳位置,使n 個居民點到郵局的距離總和最小。
編程任務:
給定n 個居民點的位置,計算n個居民點到郵局的距離總和的最小值
數據輸入:
由文件input.txt提供輸入數據,文件的第1行是居民點數n,1<=n<=10000,接下來n行是居民點的位置,每行2個整數X和Y ,-10000<=x,y<=10000。
結果輸出:
程序運行結束時,按計算結果輸出文件output.txt中。文件的第一行中的數是n個居民點到郵局的距離總和的最小值。
輸入文件實例
input.txt
5
1 2
2 2
1 3
3 -2
3 3
輸出文件實例
output.txt
10

最佳回答:


#include
using namespace std;
void QuickSort(int arry[],int l,int h);
int main()
{ int i,j,n,l,h,x,y,a,b;
int sum1=0,sum2=0;
cin >> n;
l=0;
h=n-1;
int arry[10000][2];
int *x1=new int[n];
int *y1=new int[n];
for(i=0;i<n;i++)
for(j=0;j<2;j++)
{scanf("%d",&arry[i][j]);}
for(i=0;i<n;i++)
{ x1[i]=arry[i][0];
y1[i]=arry[i][1];}
QuickSort( x1,l, h);
QuickSort( y1,l, h);
x=x1[(n -1)/2];
y=y1[(n -1)/2];
for(i=0;i<n;i++)
{ a=arry[i][0]-x;
if((arry[i][0]-x)<0)
{a=x-arry[i][0];}
b=arry[i][1]-y;
if((arry[i][1]-y)<0)
{b=y-arry[i][1];}
sum1+=a;
sum2+=b;}
cout<<sum1+sum2<<endl;
return 0;}
void QuickSort(int arry[],int l,int h)
{ int i=l, j=h; //低LOW ,高HIGH
int temp = arry[l]; //取第一個做標准數據元書的
while(i<j)
{ while(i<j && temp <=arry[j])j--;//右端掃描
if(i<j)
{arry[i]=arry[j];
i++;}
while(i<j && arry[i] < temp)i++;
if(i<j)
{arry[j]=arry[i];
j--;}}
arry[i]=temp;
if(l<i)QuickSort( arry, l,i-1);
if(i<h)QuickSort( arry, j+1,h);}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved