NYOJ-街区最短路径问题
2016-02-13 14:11
423 查看
街区最短路径问题
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述一个街区有很多住户,街区的街道只能为东西、南北两种方向。
住户只可以沿着街道行走。
各个街道之间的间隔相等。
用(x,y)来表示住户坐在的街区。
例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。
现在要建一个邮局,使得各个住户到邮局的距离之和最少。
求现在这个邮局应该建在那个地方使得所有住户距离之和最小;
输入第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数0<x,y<100,表示某个用户所在街区的坐标。
m行后是新一组的数据;
输出每组数据输出到邮局最小的距离和,回车结束;
样例输入
2 3 1 1 2 1 1 2 5 2 9 5 20 11 9 1 1 1 20
样例输出
2 44
我也是醉了,就是查找X坐标和Y坐标的中位数,然后进行计算距离即可,但是没想到,用户的居住地也可以设置成邮局。。。。。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
typedef struct {
int x;
int y;
}Node;
int N;
bool Cmx(const Node h1,const Node h2) {
return h1.x < h2.x;
}
bool Cmy(const Node h1,const Node h2) {
return h1.y < h2.y;
}
Node node[25];
int main() {
//freopen("in.txt", "r", stdin);
int n;
scanf("%d", &N);
while(N--) {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%d", &node[i].x, &node[i].y);
}
sort(node, node+n, Cmx);
int x = node[n/2].x;
sort(node, node+n, Cmy);
int y = node[n/2].y;
int sum = 0;
for (int i = 0; i < n; i++) {
sum += fabs(node[i].x - x);
sum += fabs(node[i].y - y);
}
printf("%d\n",sum);
}
return 0;
}
相关文章推荐
- Maven异常:Could not find artifact
- 动态规划讲解教程
- Spark学习笔记8-在eclipse里用Java编写spark程序
- Notification的使用
- 设计模式之抽象工厂模式
- NYOJ-水池数目
- jsp和servlet关于cookie无法保存与读取(删除)的问题
- Version Control System
- redis练习手册<六>Redis安全
- uva10905 - Children's Game
- [Python]列表的切片操作符使用
- Oracle查看表空间使用情况
- 使用RecycleView时候的adapter的简单封装
- 项目技术总结一之JSONP实现跨域调度
- [BZOJ2243] [SDOI2011]染色
- 【N32926/N32916】QT系统的编译
- 本地化处理(IOS)
- POJ 3041 Asteroids(最小覆盖数)
- javascript看视频笔记
- CSS语法