NYOJ 7-街区最短路径问题(曼哈顿距离)
来源:互联网 发布:软件开发硬件环境 编辑:程序博客网 时间:2024/05/01 12:41
题目地址:NYOJ 7
曼哈顿距离:两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离。
思路:因为只能东西和南北方向走,所以先把南北(X)和东西(Y)方向的坐标分开,分别求它们的最值,然后相加即可。分析可以得知,邮局的所建点必须在居民点上,要不然所得的值总会比最小值多出一部分来。知道这个然后让我们来分析:假设在坐标轴X上有n个点,是从1到n,我们所求的目标点在x上,先求点1和n到x的距离只和,很显然x点在1到n之间,然后再求2和n-1到x的距离之和,很显然x点在2和n-1之间,如此重复下去,x的范围不断减小,最后成为中位点。
#include <stdio.h>#include <math.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <sstream>#include <algorithm>#include <set>#include <queue>#include <stack>#include <map>using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const double pi= acos(-1.0);const double esp=1e-6;const int maxn=21010;int main() { int n,m,i,j; int sum; int x[30],y[30]; scanf("%d",&n); while(n--) { memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); sum=0; scanf("%d",&m); for(i=0; i<m; i++) scanf("%d %d",&x[i],&y[i]); sort(x,x+m); sort(y,y+m); for(i=0; i<m/2; i++) { sum+=(x[m-i-1]-x[i])+(y[m-i-1]-y[i]); } printf("%d\n",sum); } return 0;}
1 0
- NYOJ 7-街区最短路径问题(曼哈顿距离)
- NYOJ - 7 - 街区最短路径问题 ( 曼哈顿距离 )
- 街区最短路径问题 7 (数学 曼哈顿距离)
- 曼哈顿距离--NYOJ7街区最短路径问题
- NYOJ-7:街区最短路径问题
- nyoj 7 街区最短路径问题
- NYOJ 7-街区最短路径问题
- NYOJ 7 街区最短路径问题
- nyoj-7-街区最短路径问题
- 街区最短路径问题(nyoj 7)
- NYOJ 7 街区最短路径问题
- Nyoj 7 街区最短路径问题
- NYOJ 7 街区最短路径问题
- NYOJ 7 街区最短路径问题
- nyoj 7 街区最短路径问题
- nyoj 7 街区最短路径问题
- NYOJ 7 街区最短路径问题
- NYOJ 7 街区最短路径问题
- 深入理解Activity——Token之旅
- DirectShow_基础与简单示例说明
- ajaxFileUpload单图上传
- velocity 标签的使用
- 程序员求职渠道总结
- NYOJ 7-街区最短路径问题(曼哈顿距离)
- 问
- char 与 unsigned char的本质区别
- Kibana+Logstash+Elasticsearch 日志查询系统
- 弄懂Qt2维坐标系
- Samba快速安装配置
- hdoj 4738 Caocao's Bridges 【无向图边-双联通 求所有桥中权值最小的】
- create vagrant base box注意事项
- Unix网络编程学习笔记之第11章 名字与地址转换