设 \(A(x_1, y_1), B(x_2, y_2)\)。

欧几里得距离

\[|AB| = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}
\]

一般模型:在一个坐标系上,求从一个点到另一个点的最短几何距离。

曼哈顿距离

\[|AB| = |x_2 - x_1| + |y_2 - y_1|
\]

一般模型:网格图中从一个点走向另一个点的最短距离。

切皮雪夫距离

\[|AB| = \max(|x_2 - x_1|, |y_2 - y_1|)
\]

一般模型:棋盘上或者在图中一个点到另外相邻八个点的距离为 1。

曼哈顿和切皮雪夫距离的互相转化

曼哈顿 \(\to\) 切皮雪夫:\((x, y) \to (x + y, x - y)\)。

切皮雪夫 \(\to\) 曼哈顿:\((x, y) \to (\frac{x + y}{2}, \frac{x - y}{2})\)。

后者用的比较多,切皮雪夫距离在计算时要取 \(max\),往往不是很好优化。

例题:TJOI2013 松鼠聚会 - Luogu

固定聚会点后,直接计算距离和是 \(O(n)\) 的,无法接受。

我们转化成曼哈顿距离,发现 \(x, y\) 的贡献分别独立出来了,我们可以分别排序,前缀和优化,二分查找。这样就能做到单次 \(O(2logn)\) 计算,可以通过本题。

总结:OI题目中常见的三种距离的更多相关文章

  1. javascript中常见的三种开发模式

    一.单例模式: 所谓单例模式,即保证一个类只有一个实例,并提供一个访问它的全局访问点. <script type="text/javascript"> //一个类有某个 ...

  2. python中常见的三种句型if,while,for

    1.if语句: 特别说明:条件后面的冒号不能少,同样必须是英文字符. 特别特别说明:if内部的语句需要有一个统一的缩进,一般用4个空格.python用这种方法替代了其他很多编程语言中的{}. num= ...

  3. 常见的三种Web服务架构

    常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing ...

  4. Vue基础01vue的基本示例,vue的双向数据绑定,vue中常见的几种用法,vue相关常见指令

    自学vue框架,每天记录重要的知识点,与大家分享!有不足之处,希望大家指正. 本篇将讲述:vue的基本示例,vue的双向数据绑定,vue中常见的几种用法,vue相关常见指令 前期学习基础,使用vue. ...

  5. 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)

    开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库 ...

  6. 本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。

    本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop.Storm以及Spark. 当前的高性能PC机.中型机等机器在处理海量数据时,其计算能力.内存容量等指标都远远无法达到要求.在大数 ...

  7. MySQL - 常见的三种数据库存储引擎

    原文:MySQL - 常见的三种数据库存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧. ...

  8. 转载:WinForm中播放声音的三种方法

    转载:WinForm中播放声音的三种方法 金刚 winForm 播放声音 本文是转载的文章.原文出处:http://blog.csdn.net/jijunwu/article/details/4753 ...

  9. Jquery中each的三种遍历方法

    Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...

  10. ORACLE中常见的几种锁

    ORACLE中常见的几种锁: 0:none 1:null 空 2:Row-S 行共享(RS):共享表锁,sub share 3:Row-X 行独占(RX):用于行的修改,sub exclusive 4 ...

随机推荐

  1. Maven 设置 JDK 版本

    Maven 设置 JDK 版本是通过 Apache Maven Compiler Plugin 插件实现的.它用于编译项目的源代码. 方法一 有时候你可能需要将某个项目编译到与当前使用的 JDK 版本 ...

  2. linux 前端部署 tomcat 脚本

    前提: 打包后的文件位置:/home/usr/back 目的部署位置:/home/usr/prod1 目的部署位置:/home/usr/prod2 在linux 服务器上 新增文件deploy-web ...

  3. ASP.NET Core – Handle Error on Razor Page

    前言 网站不应该有 error, 但它却必然会发生的, 所以给用户一个友好的 error 页面是很重要的. 主要参考 Handle errors in ASP.NET Core Development ...

  4. chatGPT能做职业规划?看完之后发现3年软测白做了!

    "每天都是重复.单调的工作,收入不理想,想跳槽无力,学习又没有动力和方向,不知道未来的发展在哪里,甚至想转行·····" 做测试久了,很多人都有诸如此类的疑惑,不想一直停留在测试需 ...

  5. Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启

    当应用程序在运行时需要加载图片文件时,如果图片文件位于 bin 目录下,下载新图片会导致应用程序重启,这是因为 Java 应用程序在加载资源时通常会遵循以下机制: 类加载器: Java 应用程序使用类 ...

  6. python3 numpy的一些小知识点

    简介 一个用python实现的科学计算,包括: 1.一个强大的N维数组对象Array: 2.比较成熟的(广播)函数库: 3.用于整合C/C++和Fortran代码的工具包: 4.实用的线性代数.傅里叶 ...

  7. [namespace hdk] modint

    template<long long mod=INT_MAX,typename T0=long long> class modint{ private: T0 x; long long p ...

  8. 采集数据产品描述有超链接///设置免运费后,达到免送标准,其他运费不显示///给产品详情页面的图片点击放大是个模态窗///在shop页面有重复的产品展示,去重

    //产品描述有超链接,去掉 function remove_product_hyperlinks($content) { if (is_product()) { // 确保只在产品页面上应用 $con ...

  9. LeetCode 664. Strange Printer (DP)

    题目: 有台奇怪的打印机有以下两个特殊要求: 打印机每次只能打印同一个字符序列.每次可以在任意起始和结束位置打印新字符,并且会覆盖掉原来已有的字符.给定一个只包含小写英文字母的字符串,你的任务是计算这 ...

  10. GPT分区和MRB分区

    GPT分区和MBR分区都是硬盘分区的方式,但它们有不同的实现方法和优缺点. MBR(Master Boot Record)分区是传统的分区方式,它将硬盘分为四个主分区或者三个主分区和一个扩展分区.在每 ...