题意

给出 nnn 个二维坐标点,要求给出两个点的编号满足此两点间距离最远,仅允许走 454545 度斜边与网格边。(2≤n≤2∗105,∣xi∣,∣yi∣≤107)(2\leq n\leq 2*10^5, |x_i|,|y_i|\leq 10^7)(2≤n≤2∗105,∣xi​∣,∣yi​∣≤107)

题目链接:linklinklink


思路

此题仅允许走斜边与网格边,而非最短路径,因此不同于之前仅考虑最短路径的做法,即求凸包直径。(不过此题直接求凸包直径貌似也能过,应该是因为此种新定义的路径与绝对路径间的差值不大有关)

此题求法非常巧妙,我们可以先列举下述四种情况,对整体题目有一个大致把握。

上述四种情况中,红色边为真实路径,因此我们可以列出路径的计算公式如下。
(1)dis=[(2−1)∗x1+y1]−[(2−1)∗x2+y2](2)dis=[(2−1)∗x1−y1]−[(2−1)∗x2−y2](3)dis=[x1+(2−1)∗y1]−[x2+(2−1)∗y2](3)dis=[x1−(2−1)∗y1]−[x2−(2−1)∗y2](1) \ dis = [(\sqrt2-1)*x_1+y_1]-[(\sqrt2-1)*x_2+y_2] \\ (2) \ dis = [(\sqrt2-1)*x_1-y_1]-[(\sqrt2-1)*x_2-y_2] \\ (3) \ dis = [x_1+(\sqrt2-1)*y_1]-[x_2+(\sqrt2-1)*y_2] \\ (3) \ dis = [x_1-(\sqrt2-1)*y_1]-[x_2-(\sqrt2-1)*y_2] \\ (1) dis=[(2​−1)∗x1​+y1​]−[(2​−1)∗x2​+y2​](2) dis=[(2​−1)∗x1​−y1​]−[(2​−1)∗x2​−y2​](3) dis=[x1​+(2​−1)∗y1​]−[x2​+(2​−1)∗y2​](3) dis=[x1​−(2​−1)∗y1​]−[x2​−(2​−1)∗y2​]
此四种情况即为本题计算答案时所有的情况,不难发现,对于情况一来说,如果采用的公式非公式 (1)(1)(1),则 disdisdis 会变小,即对于每一种情况来说,只有使用其情况所对应的公式才能获得最大的 disdisdis 值,所以我们可以对于上述的四种情况分别计算。

以情况 (1)(1)(1) 为例,每次选取 (2−1)∗x1+y1(\sqrt2-1)*x_1+y_1(2​−1)∗x1​+y1​ 的最大值和最小值,然后最大值减去最小值即为该情况下的两点距离最大值。


总结

此做法不单适应于本题,如果题目改为只能走网格边或者变成切比雪夫坐标系,本做法都可以非常简单地解决。因此该做法的思想比较精妙,需要掌握!


代码

#include <bits/stdc++.h>
const int N = 2e5+100;
const double inf = 1e16;
const double E = sqrt(2)-1;
using namespace std;double X[N], Y[N], ans, f[4][2] = {{E,1},{E,-1},{1,E},{1,-E}};
int n, p1, p2, id1, id2;int main(){scanf("%d",&n);for(int i = 1; i <= n; i++) scanf("%lf%lf",&X[i],&Y[i]);for(int k = 0; k < 4; k++){double maxn = -inf, minn = inf;for(int i = 1; i <= n; i++){double cur = X[i] * f[k][0] + Y[i] * f[k][1];if(cur > maxn) maxn = cur, id1 = i;if(cur < minn) minn = cur, id2 = i;}if(ans < maxn-minn) ans = maxn-minn, p1 = id1, p2 = id2;}printf("%d %d\n", p1, p2);
}

后记

博观而约取,厚积而薄发。

【2015 NEERC - G 】Garden Gathering【距离计算变形、数学巧妙转换】相关推荐

  1. php 地图两点距离计算,计算地图上两点间的距离PHP类

    计算地图上两点间的距离,使用的是谷歌地图 class GeoHelper { /** * @param int $lat1 * @param int $lon1 * @param int $lat2 ...

  2. R语言dist函数距离计算实战(欧几里得距离、曼哈顿距离)

    R语言dist函数距离计算实战(欧几里得距离.曼哈顿距离) 目录 R语言dist函数距离计算实战(欧几里得距离.曼哈顿距离)

  3. oracle如何计算2个坐标的距离,百度地图两个坐标之间的距离计算

    /** * 计算两组经纬度坐标 之间的距离 * params :lat1 纬度1: lng1 经度1: lat2 纬度2: lng2 经度2: len_type (1:m or 2:km); * re ...

  4. 微信外卖小程序 怎么计算与客户的距离_微信小程序结合腾讯位置服务实现用户商家距离计算...

    前言 小程序实操,距离计算总结. 思路 一共有两种方法,各有利弊: 1.利用小程序的wx.getLocation 方法得到用户的经纬度,然后用已知的商家的经纬进行计算; 2.利用腾讯地图位置服务cal ...

  5. html GPS坐标实现,JavaScript 实现GPS坐标点距离计算(两个经/纬度间的距离计算)...

    在LBS(基于位置服务)的一些应用中,有时我们会需要计算两个用户或两个坐标点之间的距离.要解决这类问题,就要了解空间几何的概念并结合数学中在三角函数公式计算两点之间的值.本文介绍基于经度/纬度的,两个 ...

  6. 经纬度之间的距离计算

    来自谷歌地图的计算公式: 通过JAVA的Math类各种方法调用.实现上述公式 private static double EARTH_RADIUS = 6378.137;// 单位千米/*** 角度弧 ...

  7. 移动端H5 腾讯地图sdk 当前位置 地址你解析 距离计算

    <template><view class="content"><view><input class="uni-input&qu ...

  8. 机器学习 | 距离计算

    文章目录 距离计算 1. 闵可夫斯基距离(有序属性) 1.1 曼哈顿距离 1.2 欧氏距离 2. VDM 距离(无序属性) 3. MinkovDM 距离(混合属性) 4. 加权距离(重要性不同) 参考 ...

  9. hadoop--HDFS_机架感知与网络拓扑节点距离计算

    目录 机架感知 网络拓扑--节点距离计算 机架感知 1.什么是机架感知? Hadoop集群中副本存储节点选择: 2.什么时候会涉及机架感知? 当Hadoop集群规模相当大的情况下,就要考虑机架感知: ...

  10. 向量距离计算 java_在机器学习中扮演着极为重要角色的向量

    本章要点: 向量: 欧氏距离: 曼哈顿距离: 切比雪夫距离. 无论是在现实世界里,还是在人工智能领域中,"距离"都是一个相当重要的度量手段:在现实世界中,"距离" ...

最新文章

  1. 名校 Stanford
  2. tool class
  3. mvc EF 从数据库更新实体,添加视图实体时添加不上的问题
  4. mysql less6教程_Sqli labs系列-less-56 报错注入法(上)
  5. “iQOO”怎么读?vivo官宣“发音”视频
  6. 1024灯控台初学_MA2的小弟MA1控台说明书
  7. Android SDCard UnMounted 流程分析(三)
  8. zabbix客户端安装配置
  9. BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
  10. 火狐浏览器缓存区的利用,如何提取火狐缓存的动画
  11. kangle 3.4.8 发布,国产开源 Web 服务器
  12. php如何使用网关,在某种情况下,由于PHP代码,网关已关闭(Gateway is down because of PHP code in one situation)...
  13. AI:人工智能领域之AI的发展历史图集合、AI发展思维导图之详细攻略
  14. android数独游戏数据库分析,基于Android实现数独游戏
  15. 家政维修小程序+上门预约小程序+VUE前后端分离+uniapp(附近师傅+门店入驻+在线抢单服务APP、小程序、公众号、H5)
  16. 双线macd指标参数最佳设置_MT4双线MACD设置方法及扩展应用
  17. 微信的账号连接服务器失败怎么回事,微信无法连接到服务器的原因和6个解决方法...
  18. strcmp函数的分析及实现
  19. [电设训练]幅频特性测试仪
  20. html 纵向导航,div+css纵向导航如何实现且为导航添加超链接

热门文章

  1. mokoid android open source HAL hacking in a picture
  2. MYSQL 查看表定义的 4 种方法
  3. coreseek 利用python作数据源建立索引
  4. 为多个VLAN实现DCHP
  5. ajax实现form表单提交
  6. 缩放浏览器不会换行_深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系...
  7. 数据结构(一):并查集
  8. 【转载好文】对char *和char []做形参的深入理解+const char*/char const*/char *const的解析
  9. 勾股定理的html代码,有趣的数学——勾股定理
  10. Java获取resin端口_线上解决Resin服务响应过慢的几个方法