曼哈顿距离:两个点在标准坐标系上的绝对轴距总和

可以表示为:

传送门

本题的题意:给定n个点,每个点到其他的点都可以取得曼哈顿距离和,求最小的距离和

思路:分别对x坐标、y坐标排序,我们可以先对x坐标排序,得到一个坐标序号,每个点的序号i的意义是:有i-1个点的横坐标比它小,有n-i个点的横坐标比它大,所以如果我们还可以求得一个x坐标的前缀和sumx的话,那么

就是比第i个点横坐标小的与第i个点横坐标差的和,即  ,是比第i个点横坐标大的与第i个点横坐标差的和,即  

这两个相加就是 ,相应的对y也进行相同的操作,再找一次最小值就可以了

代码

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL N=0x7fffffffffffffff;
struct point
{LL x,y;LL idx,idy;
}p[100005];
bool cmp1(point p1,point p2)
{return p1.x<p2.x;
}
bool cmp2(point p1,point p2)
{return p1.y<p2.y;
}
LL sumx[100005],sumy[100005];
int main()
{LL t;scanf("%I64d",&t);while(t--){LL n;scanf("%I64d",&n);for(LL i=1;i<=n;i++)scanf("%I64d%I64d",&p[i].x,&p[i].y);sort(p+1,p+n+1,cmp1);sumx[0]=0;for(LL i=1;i<=n;i++){p[i].idx=i;sumx[i]=sumx[i-1]+p[i].x;}sort(p+1,p+n+1,cmp2);sumy[0]=0;for(LL i=1;i<=n;i++)sumy[i]=sumy[i-1]+p[i].y;LL ans=1LL<<62;for(LL i=1;i<=n;i++){LL sum=(i-1)*p[i].y-sumy[i-1]+(sumy[n]-sumy[i])-(n-i)*p[i].y;sum=sum+(p[i].idx-1)*p[i].x-sumx[p[i].idx-1]+(sumx[n]-sumx[p[i].idx])-(n-p[i].idx)*p[i].x;ans=min(ans,sum);}printf("%I64d\n",ans);}return 0;
}

hdu4311 Meeting point-1 求最小的曼哈顿距离和相关推荐

  1. HDU 4311 - Meeting point-1(前缀和优化曼哈顿距离)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4311 题意:给定n个点,找出一点使得该点到其余各点的曼哈顿距离总和最小,输出最小值. 思路:分别对横纵 ...

  2. 为什么不可以使用哈曼顿距离_K-means真的不能使用曼哈顿距离吗?

    问题 说到k-means聚类算法,想必大家已经对它很熟悉了,它是基于距离计算的经典无监督算法,但是有一次在我接受面试时,面试官问了我一个问题:"k-means为什么不能使用曼哈顿距离计算,而 ...

  3. HDU 4666 Hyperspace【最远曼哈顿距离+优先队列】

    这个题是动态的求最远曼哈顿距离.做法和POJ 2926 Requirements一样,都是通过二进制枚举符号的情况. 每插入一个节点都要询问最大值和最小值,因此用一个优先队列或者堆维护就可以了. #i ...

  4. 【51nod - 1108】距离之和最小 V2(曼哈顿距离,中位数性质)

    题干: 三维空间上有N个点, 求一个点使它到这N个点的曼哈顿距离之和最小,输出这个最小的距离之和. 点(x1,y1,z1)到(x2,y2,z2)的曼哈顿距离就是|x1-x2| + |y1-y2| + ...

  5. UVA11889(给出lcm(A,B)=C中的AC求最小的B)

    题意:      给出最小公倍数LCM(A,B) = C中的A,C求最小的B. 思路:       lcm=(a*b)/gcd,把等号两侧同时除以a得到lcm/a=b/gcd左侧是已知的,右侧的gcd ...

  6. 用python实现(1.求输入的百倍,十位,个位数;2.输入a,b和ab间夹角,计算c边长;3.计算两点间曼哈顿距离;4.计算给定数据的几何平均数;5.计算向量的L1和L2范数)

    import math from random import choices from functools import reduce print("1.获取输入整数的百位,十位,个位数(无 ...

  7. 试除法求最小N个素数之二

    Trial division 试除法求最小N个素数是一个经典的算法. 这个算法不同于前一个版本<试除法求最小N个素数>的方法,也是一个比较快速的方法. 这个算法考虑以下两点: 1.偶数中只 ...

  8. 一种更简单的求最小平方均值函数(MSE)的方法 -- 梯度下降法。

    在上一篇博客中我们通过解析解法算出来了 但是上面公式中的对称阵是N维乘以N维的,复杂度为O(n*n*n),虽然很精准但是很慢. 为此我们引入梯度下降法 我们首先大致画出MSE的图像,MSE是一个开口向 ...

  9. hdu3491 最小点割集(无向图求最小点割集通用方法)

    无向图最小点割集,确定起点S,终点T.每个点都有自己的点权值vi,求最小点权和的割点集,使得S无法到达T. 解法:将每个点拆分为两个点v和v',之间的权值为vi(单向边),将原图中的每条边赋权值为IN ...

  10. 求最小码距 (10 分)

    求最小码距 (10 分) 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 题目描述 计算机组成原理老师给小明出了一道求最小码距的题目, 有以下由1个字节组成的合法编码集{0xA ...

最新文章

  1. c语言的语言扩展的数据类型,C语言之数据类型
  2. 【存储知识学习】第八章-Fibre Channel协议-8.1 FC网络和8.2FC协议中七种端口类型-《大话存储》阅读笔记
  3. Animation.wrapMode循环模式
  4. 蓝桥杯第七 java决赛_第七届(16年)蓝桥杯java B组决赛真题
  5. Java与.NET的WebServices相互调用
  6. 布隆过滤器(Bloom Filter)的原理和实现
  7. javafx由浅到深的 认识(一)
  8. 【Python】time内置模块处理时间信息
  9. Linux求平方脚本,Linux Shell脚本系列教程(五):数学运算
  10. sql server作业_SQL Server作业性能–报告
  11. 一人身兼多个项目时的“课程表”工作模式实践
  12. 查看JVisualVM查看信息
  13. 直播app系统源码,简单的登录界面(登录、注册、记住密码等按键)
  14. python点击按钮窗口之间跳转_PyQt5点击按钮,实现界面之间的跳转思路
  15. 2019最新计算机配置,2019年电脑配置推荐,收藏一篇文章就够了
  16. 2022熔化焊接与热切割复训题库模拟考试平台操作
  17. Linux下进行rar文件解压和压缩
  18. FZUOJ 2214 Knapsack problem 背包
  19. 全世界最亏本的事(转)
  20. 基本系统调用性能lmbench测试方法和下载

热门文章

  1. Bitbucket安装配置
  2. 从音频提取音高以及音符
  3. e站app里站hosts_[装修记 天猫家装e站~大庆站]
  4. 基于JAVAWeb美食网站设计计算机毕业设计源码+数据库+lw文档+系统+部署
  5. vivo android框架服务,vivo服务安全插件
  6. c++中rand(),srand()使用
  7. 运维人故障定责甩锅话语指南
  8. 产品商业需求文档_【器】我的产品需求文档心法
  9. AI相关英语词汇(持续更新)
  10. Autosar DCM 诊断(Diagnostic Communication Manager)