题目地址

p3964

解题思路

首先学习一下曼哈顿距离和切比雪夫距离即二者之间的转换。

那根据切比雪夫距离的定义,只要x, y这个点到它周围八个点的距离都是一的话,就是使用的切比雪夫距离。
对于给出的n个点,选择其中一个点并计算它到其他点的距离的话,由于切比雪夫距离定义为:d = max(|x1 - x2|,|y1 - y2|) 。计算所有点到当前点距离的时间复杂度为O(n)。那n个点就是O(n2)。时间上来说并不理想。
我们可以把给出的坐标转换为曼哈顿距离,曼哈顿距离的定义是 d = |x1 - x2| + |y1 - y2|。对于xi来说所有点到他的距离为 d = |x1 - xi| + |x2 - xi| + … + |xn - xi|
通过对所有点的x进行排序,就可以将公式里的绝对值去掉。
式子变为了 d = xi - x1 + xi - x2 +… + xi - xi + xi+1 - xi + … + xn - xi 也就是位置 i 之前的全变为xi减去当前点x值,i后面的全都不变。
再进行整理得到

进行一次遍历找到最小的距离即可,在转换的时候,可以先不除二,为了避免浮点数运算。在求出距离后再对距离除二即可。

参考博客:
https://blog.csdn.net/Code92007/article/details/103241897
https://www.cnblogs.com/adelalove/p/8612540.html
https://blog.csdn.net/qq_41997978/article/details/103213051?utm_source=app

AC代码

#include <iostream>
#include <algorithm>using namespace std;typedef long long ll;struct node
{ll x, y;
};struct node a[100010];
ll x[100010], y[100010];
ll sumx[100010],sumy[100010];int main()
{int n;cin >> n;for (int i=1; i<=n; i++){cin >> x[i] >> y[i];a[i].x = x[i] + y[i];a[i].y = x[i] - y[i];x[i] = a[i].x, y[i] = a[i].y;}sort (x+1, x+n+1);sort (y+1, y+n+1);for (int i=1; i<=n; i++){sumx[i] = sumx[i-1] + x[i];sumy[i] = sumy[i-1] + y[i];}ll minnum = 8e18;for (int i=1; i<=n; i++){int locationx = lower_bound(x+1, x+n+1, a[i].x) - x;int locationy = lower_bound(y+1, y+n+1, a[i].y) - y;ll temp = locationx * a[i].x - sumx[locationx] + (sumx[n] - sumx[locationx]) - (n-locationx)*a[i].x;temp += locationy * a[i].y - sumy[locationy] + (sumy[n] - sumy[locationy]) - (n - locationy) * a[i].y;minnum = min(minnum, temp);}cout << minnum / 2 << endl;return 0;
}

洛谷3964 松鼠聚会相关推荐

  1. #距离#JZOJ 3256 BZOJ 3170 洛谷 3964 松鼠聚会

    题目 分析 首先这个距离是切比雪夫距离,得把它转换成曼哈顿距离,也就是把(x,y)(x,y)(x,y)变成(x+y2,x−y2)(\frac{x+y}{2},\frac{x-y}{2})(2x+y​, ...

  2. 洛谷 P3964 松鼠聚会

    题目链接 参考链接 题解: 这道题目的距离其实就是切比雪夫距离,又称棋盘距离,也就是D=max(∣x2−x1∣,∣y2−y1∣)D = max(|x_2-x_1|,|y_2-y_1|)D=max(∣x ...

  3. 洛谷P3964松鼠聚会

    题目 题意:求最小的从某一个点到其余点的切比雪夫距离和. 将一个图中的\((x,y)\)坐标转到新坐标\((x+y,x-y)\)后,图中的曼哈顿距离就是新图中的切比雪夫距离, 证明:分类讨论, 1.\ ...

  4. 洛谷· [AHOI2008]紧急集合 / 聚会

    初见安~这里是传送门:洛谷P4281紧急集合/聚会 题目描述 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个 ...

  5. 洛谷3964 [TJOI2013]松鼠聚会

    题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...

  6. 洛谷 P1293 班级聚会

    P1293 班级聚会 题目描述 毕业25年以后,我们的主人公开始准备同学聚会.打了无数电话后他终于搞到了所有同学的地址.他们有些人仍在本城市,但大多数人分散在其他的城市.不过,他发现一个巧合,所有地址 ...

  7. 洛谷 P3258 松鼠的新家 题解

    题面 貌似这道题暴力加玄学优化就可以AC? 下面是正解: 1.树链剖分: 我们在u到v之间都放一个糖果,可以将松鼠它家u到v的糖果数都加1.每一次将a[i]到a[i+1] (a数组是访问顺序)的节点加 ...

  8. 洛谷P3258松鼠的新家

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树"上.松 ...

  9. 洛谷3258 松鼠的新家

    题目大意 按给定顺序遍历一棵n个节点的树,求每个节点经过的次数.(2≤n≤3×1052\le n \le3\times10^52≤n≤3×105) 知识储备 树上差分: 首先回顾差分.差分就是将区间的 ...

最新文章

  1. mysql5.6允许远程连接_mysql允许远程连接的方法
  2. SAP MM VL09试图取消收货报错说某个HU负库存
  3. LCA(树上倍增 || rmqlca||)
  4. js两种显示日期方法
  5. 15000个开源项目中挑选Top 12
  6. 学习游戏渲染(Shader)的用处
  7. 【独立游戏】黎明之刃——3D硬核ARPG游戏
  8. Spring----自定义异常类
  9. matlab去除坏点,图像处理之坏点校正及源码实现
  10. 横向循环焦点图片展示_多光子显微镜成像技术之十二:多光子显微镜中的焦点深度扩展方法...
  11. AT2 Homeomorphism and the group structure on a circle
  12. subprocess模块(了解)
  13. 【配送路径规划】基于matlab遗传算法求解带时间窗的多配送中心半开放式车辆路径规划问题【含Matlab源码 YC002期】
  14. 渗透测试常用工具-端口扫描
  15. adb 指令集说明详解[非常详细]
  16. 人工智能笔记之专业选修课4.1.5 - 博弈论 9.重复博弈,效用,随机博弈
  17. java jbutton 背景颜色_java – 在Windows上设置JButton背景颜色
  18. qca wifi相关操作命令
  19. 【推荐系统】特征工程技巧(kaggle比赛技巧、tx的做法)
  20. 关于NSDateFormatter年份计算超前问题

热门文章

  1. 数据库的备份与还原+INI文件数据库参数配置
  2. C#报错提醒:“对象引用对于非静态字段、方法或属性是必需的”
  3. 设备指示灯开关状态识别检测系统 yolov5
  4. 百度地图添加标注及图标拖拽及给标注添加右键
  5. 不讲“日本汉语”就不能说话?
  6. Python 虚拟环境
  7. Conmi的正确答案——keil的“Cannot read RTE data from project file: RTE is not enabled”问题
  8. indesign选中不了图片删除_用 InDesign 制作带拼音的文件
  9. idea出现Can not set int field xxx to java.lang.Float 错误
  10. English Learning - Day21 作业打卡 2022.12.27 周二