【51nod - 1108】距离之和最小 V2(曼哈顿距离,中位数性质)
题干:
三维空间上有N个点, 求一个点使它到这N个点的曼哈顿距离之和最小,输出这个最小的距离之和。
点(x1,y1,z1)到(x2,y2,z2)的曼哈顿距离就是|x1-x2| + |y1-y2| + |z1-z2|。即3维坐标差的绝对值之和。
收起
输入
第1行:点的数量N。(2 <= N <= 10000) 第2 - N + 1行:每行3个整数,中间用空格分隔,表示点的位置。(-10^9 <= X[i], Y[i], Z[i] <= 10^9)
输出
输出最小曼哈顿距离之和。
输入样例
4 1 1 1 -1 -1 -1 2 2 2 -2 -2 -2
输出样例
18
解题报告:
用中位数的性质将三个坐标拆开来求。注意这题不能直接取n/2了,,,虽然一般情况下都是成立的,但是如果n=1那就GG了。所以保险起见以后用的时候还是奇数偶数分开讨论好了。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
struct Node {ll x,y,z;
} p[MAX];
bool cmp1(Node a,Node b) {return a.x < b.x;
}
bool cmp2(Node a,Node b) {return a.y < b.y;
}
bool cmp3(Node a,Node b) {return a.z < b.z;
}
int main()
{int n;ll sum = 0;cin>>n;for(int i =1; i<=n; i++) {scanf("%lld%lld%lld",&p[i].x,&p[i].y,&p[i].z);}sort(p+1,p+n+1,cmp1);int fk = n%2 == 1 ? n/2+1 : n/2; for(int i = 1; i<=n; i++) {sum += abs(p[i].x - p[fk].x);}sort(p+1,p+n+1,cmp2);for(int i = 1; i<=n; i++) {sum += abs(p[i].y - p[fk].y);}sort(p+1,p+n+1,cmp3);for(int i = 1; i<=n; i++) {sum += abs(p[i].z - p[fk].z);}cout << sum;return 0 ;}
【51nod - 1108】距离之和最小 V2(曼哈顿距离,中位数性质)相关推荐
- 51nod 1096 距离之和最小 思维题,求中位数
题目: 在一条直线上,与两个点距离之和最小的点,是怎样的点? 很容易想到,所求的点在这两个已知点的中间,因为两点之间距离最短. 在一条直线上,与三个点距离之和最小的点,是怎样的点? 由两个点的规律,我 ...
- 关于货仓选址问题的方法及证明(在数轴上找一点使得该点到所有其他点的距离之和最小)...
在数轴上找一点使得该点到所有其他点的距离之和最小 方法:找到大小为中位数的点,该点就是要求的点(如有两个取之间任意一点都行) 证明: 先看看当只有2个点时的情况: 分类讨论: 如果在A的左边(如 $P ...
- Matlab粒子群算法搜索费马点-求到多个点距离之和最小的点
0. 前言 本文是在我之前一篇博客的基础上进行了扩展和延申,原文使用了matlab自带的优化函数,而本文采用了一个比较经典的随机优化算法--粒子群算法,对给定的目标函数进行求解. Matlab实现搜索 ...
- 三维马氏距离_各种距离(欧氏距离、曼哈顿距离、切比雪夫距离、马氏距离等)...
引用:http://blog.csdn.net/shiwei408/article/details/7602324 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurem ...
- 圆拟合算法(距离之和最小)
上一篇博客介绍了最小二乘法拟合圆的方法.这种方法对误差符合正态分布的数据点很有效.但是在机器视觉应用中经常会碰到一些干扰点.这些干扰点多数时候是偏向某一个方向的.这时要是用最小二乘法拟合,拟合出的圆会 ...
- 利用最小二乘法,用直线拟合点时,为什么计算竖直距离而非垂直距离?为什么在线性回归分析中,求的是距离平方和最小,而不是距离之和最小?
我的理解是,直接求距离之和可能导致多个解存在的情况,而求距离平方和可以保证唯一解,参考: 当且仅当a=b时,不等式等号成立 参考文章:利用最小二乘法,用直线拟合5点时,为什么计算竖直距离而非垂直距离?
- 三角形一点到三边距离最小_三角形内有没有一个点到三边距离之和最小 -
不论是不是内心, 一个点到三边的距离都是垂线段的长度, 相互之间不能直接比较. 正确的结论是这样的: ①若三角形不等腰, 则平面上到三边距离和最小的点是最大内角的顶点. ②若三角形等腰, 而底边大于腰 ...
- 三角形一点到三边距离最小_三角形内有没有一个点到三边距离之和最小
不论是不是内心 , 一个点到三边的距离都是垂线段的长度 , 相互之间不能直接比较 . 正确的结论是这样的 : ①若三角形不等腰 , 则平面上到三边距离和最小的点是最大内角的顶点 . ②若三角形等腰 , ...
- 欧式距离与曼哈顿距离的区别以及曼哈顿距离的应用
欧氏距离就是我们最常用的两点之间的直线距离. 以二维空间为例,两点(x1,y1),(x2,y2)之间的欧式距离为: 曼哈顿距离则表示两个点在标准坐标系上的绝对轴距之和. 还是以二维空间为例,两点(x1 ...
最新文章
- Java项目:基于遗传算法学校排课系统(java+Springboot+Maven+mybatis+Vue+Mysql)
- STM32-USART控制led和蜂鸣器
- 递归求解并生成哈夫曼编码的代码实现
- 令人笑喷的56个代码注释,你写过多少?
- 在dbca建库的时候报ORA-27125错误的解决方法
- 用户操作-用户添加操作代码实现
- SAP CRM Fiori Opportunity应用功能一览
- ubuntu 18.04.1 使用心得
- Bash:把粘贴板上的内容拷贝的文件中。
- atitit.故障排除--- 当前命令发生了严重错误。应放弃任何可能产生的结果sql server 2008
- 如何轻松破解windows密码(运行即可,免重启)
- 移动硬盘插入提示需要格式化RAW_分区变成RAW格式怎么办?
- 学生信息管理系统python
- 媒企农三方共建专属基地 探索助力吉林乡村振兴
- 2020年茶艺师(初级)考试及茶艺师(初级)实操考试视频
- 24点纸牌游戏,c语言实现
- T58 Office开发模式
- @media 屏幕适配常用尺寸
- 主管发话:一周搞不定用友U8 ERP跨业务数据分析,明天就可以“毕业”了
- python需要掌握的词汇量_北大保安,词汇量15000、会Python编程,网友:当保安都不够格!...
热门文章
- [Leetcode][第410题][JAVA][分割数组的最大值][动态规划][二分]
- AtCoder-2379 - 连接竹竿 思维 | 数学
- win10切第二屏幕_Win10特有的31个快捷键,装逼利器,赶快收藏吧!学习电脑知识...
- python执行效率有多低_python – Scapy的低性能
- Java NIO 教程
- 收件箱java项目源码,Java物资管理系统项目源码(含数据库).zip
- cmake install_在vscode中使用cmake-format(windows端)
- linux重启memcache_Linux下的Memcache安装方法
- 新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例
- debian 升级linux内核,Debian8升级内核到4.5