邮局选址:
在一个按照东西和南北方向划分成规整街区的城市里,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
这里有一题ACM的小题目,求众神解答。帮写个程序。小弟冰天雪地裸奔哭嚎以示感谢!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- Mr_Linzc 2013-11-03 02:08关注
#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);}本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥50 永磁型步进电机PID算法
- ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥200 uniapp长期运行卡死问题解决
- ¥15 latex怎么处理论文引理引用参考文献
- ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
- ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?