题目链接

参考链接

题解:

这道题目的距离其实就是切比雪夫距离,又称棋盘距离,也就是D=max(∣x2−x1∣,∣y2−y1∣)D = max(|x_2-x_1|,|y_2-y_1|)D=max(∣x2​−x1​∣,∣y2​−y1​∣)。与之有一定联系的距离是曼哈顿距离,假设A(x1,y1),B(x2,y2)A(x_1,y_1),B(x_2,y_2)A(x1​,y1​),B(x2​,y2​),那么∣AB∣=∣x2−x1∣+∣y2−y1∣|AB|=|x_2-x_1|+|y_2-y_1|∣AB∣=∣x2​−x1​∣+∣y2​−y1​∣。

我们将曼哈顿距离化开:

D=∣x2−x1∣+∣y2−y1∣=max(x2−x1+y2−y1,x1−x2+y2−y1,x1−x2+y1−y2,x2−x1+y1−y2)=max{∣(x2+y2)−(x1+y1)∣,∣(x2−y2)−(x1−y1)∣}D=|x_2-x_1|+|y_2-y_1|=max(x_2-x_1+y_2-y_1,x_1-x_2+y_2-y_1,x_1-x_2+y_1-y_2,x_2-x_1+y_1-y_2)=max\{|(x_2+y_2)-(x_1+y_1)|,\ |(x_2-y_2)-(x_1-y_1)|\}D=∣x2​−x1​∣+∣y2​−y1​∣=max(x2​−x1​+y2​−y1​,x1​−x2​+y2​−y1​,x1​−x2​+y1​−y2​,x2​−x1​+y1​−y2​)=max{∣(x2​+y2​)−(x1​+y1​)∣, ∣(x2​−y2​)−(x1​−y1​)∣}

上面这个形式其实和切比雪夫距离Dchess=max(∣x2−x1∣,∣y2−y1∣)D_{chess}=max(|x_2-x_1|,|y_2-y_1|)Dchess​=max(∣x2​−x1​∣,∣y2​−y1​∣)形式上非常像,我们可以发现,曼哈顿意义下的(x1,y1)(x2,y2)(x_1,y_1)(x_2,y_2)(x1​,y1​)(x2​,y2​)两点的距离转化为切比雪夫意义下的(x2+y2,x2−y2)(x1+y1,x1−y1)(x_2+y_2,x_2-y_2)(x_1+y_1,x_1-y_1)(x2​+y2​,x2​−y2​)(x1​+y1​,x1​−y1​)两点的距离。

我们可以推广一下,给出曼哈顿意义下的坐标(x,y)(x,y)(x,y),可以转化成切比雪夫意义下的坐标(x+y,x−y)(x+y,x-y)(x+y,x−y)。

反过来,给了切比雪夫意义下的坐标(x,y)(x,y)(x,y),可以转化成曼哈顿意义下的坐标(x+y2,x−y2)(\frac{x+y}2,\frac{x-y}2)(2x+y​,2x−y​)。

有了上面这个转化怎么用呢?

我们现在假设dis(i,j)dis(i,j)dis(i,j)为曼哈顿意义下iii到jjj的曼哈顿距离。如果当前的终点是jjj,那么有ans=∑i=1ndis(i,j)ans=\sum_{i=1}^ndis(i,j)ans=∑i=1n​dis(i,j),这个要是求的话,复杂度是O(n2)O(n^2)O(n2)。我们化简一下:

∑i=1ndis(i,j)=dis(1,j)+dis(2,j)+⋯+dis(n,j)\sum_{i=1}^ndis(i,j)=dis(1,j)+dis(2,j)+\dots+dis(n,j)∑i=1n​dis(i,j)=dis(1,j)+dis(2,j)+⋯+dis(n,j)

我们现在用dis(i,j)dis(i,j)dis(i,j)中的一部分∣xi−xj∣|x_i-x_j|∣xi​−xj​∣举例化简:

∑i=1nΔx=∣x1−xj∣+∣x2−xj∣+⋯+∣xj−xj∣+∣xj+1−xj∣+⋯+∣xn−xj∣\sum_{i=1}^n\Delta x=|x_1-x_j|+|x_2-x_j|+\dots+|x_j-x_j|+|x_{j+1}-x_j|+\dots+|x_n-x_j|∑i=1n​Δx=∣x1​−xj​∣+∣x2​−xj​∣+⋯+∣xj​−xj​∣+∣xj+1​−xj​∣+⋯+∣xn​−xj​∣

我们将横坐标排序成递增,容易发现∣xj−xj∣|x_j-x_j|∣xj​−xj​∣之前的式子都可以拆掉绝对值化简;∣xj+1−xj∣|x_{j+1}-x_j|∣xj+1​−xj​∣及以后的式子可以不用动,这样上面的式子就化简成:

=∑i=1j(xj−xi)+∑i=j+1n(xi−xj)=\sum_{i=1}^j(x_j-x_i)+\sum_{i=j+1}^n(x_i-x_j)=∑i=1j​(xj​−xi​)+∑i=j+1n​(xi​−xj​)

这个式子可以发现就是前缀和。dis(i,j)dis(i,j)dis(i,j)中的Δy\Delta yΔy可以同理化简。

因此这道题目的整体思路就是:

读入切比雪夫意义下的坐标并化为曼哈顿坐标,坐标可以先不除以2,到最后将答案除以2也可以。

将x,yx,yx,y分别排序为递增,并求出前缀和。

然后枚举终点,使用二分将xi,yix_i,y_ixi​,yi​在递增序列的位置找出,根据上面的式子,即可求出答案。

实现细节见代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
const int MAXN = 1e6 + 10;int x[MAXN], y[MAXN], gx[MAXN], gy[MAXN], sumx[MAXN], sumy[MAXN], n;
int solve(int now) {int rx = lower_bound(gx + 1, gx + 1 + n, x[now]) - gx;int ry = lower_bound(gy + 1, gy + 1 + n, y[now]) - gy;int ans = rx * x[now] - sumx[rx] + sumx[n] - sumx[rx] - (n - rx) * x[now];ans += ry * y[now] - sumy[ry] + sumy[n] - sumy[ry] - (n - ry) * y[now];return ans;
}
signed main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) {int x1, y1;cin >> x1 >> y1;x[i] = gx[i] = x1 + y1; // 这里不÷2,避免精度问题y[i] = gy[i] = x1 - y1;}sort(gx + 1, gx + 1 + n);sort(gy + 1, gy + 1 + n);for (int i = 1; i <= n; i++) {sumx[i] = sumx[i - 1] + gx[i];sumy[i] = sumy[i - 1] + gy[i];}int ans = 1e16;for (int i = 1; i <= n; i++) {ans = min(ans, solve(i));}cout << ans / 2 << endl;return 0;
}

洛谷 P3964 松鼠聚会相关推荐

  1. 洛谷P3964松鼠聚会

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

  2. 洛谷3964 松鼠聚会

    题目地址 p3964 解题思路 首先学习一下曼哈顿距离和切比雪夫距离即二者之间的转换. 那根据切比雪夫距离的定义,只要x, y这个点到它周围八个点的距离都是一的话,就是使用的切比雪夫距离. 对于给出的 ...

  3. #距离#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​, ...

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

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

  5. 松鼠聚会(洛谷-P3964)

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

  6. 洛谷 P3964 [TJOI2013]松鼠聚会(切比雪夫距离和曼哈顿距离转换)

    这个距离的定义就是切比雪夫距离的定义.切比雪夫距离的计算式子是:d = max(|x1 - x2|,|y1 - y2|) 在切比雪夫距离的定义下,一个点和周围相邻的8个点的距离相等(都为1). 如果将 ...

  7. 洛谷P3964 [TJOI2013]松鼠聚会 切比雪夫距离转曼哈顿距离

    https://www.luogu.com.cn/problem/P3964 切比雪夫距离为max(|x-o.x|,|y-o.y|),曼哈顿距离为|x-o.x|+|y-o.y| 当我们要求n个点的到1 ...

  8. 洛谷 P1293 班级聚会

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

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

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

最新文章

  1. 关于commonjs,AMD,CMD之间的异同
  2. 45 岁,2 万亿身价,苹果的人生才刚刚开始
  3. HDU 5861 Road 线段树区间更新单点查询
  4. Just h-index(主席树+二分)
  5. 图解一步步安装SharePoint Foundation 2010
  6. Fine-tunning适用情况
  7. 【转载】MySQL学习总结一
  8. 麻省理工学生令计算机系统升级不需重启
  9. 程序员如何从0到1搭建自己的技术博客
  10. 201512-1-数位之和
  11. 职场不是家,不会方法,如何混职场
  12. 搜索引擎提交软件_网站如何被搜索引擎快速收录?
  13. 服务器硬盘一直亮红灯怎么回事,请问:电脑的硬盘为何一直亮着红灯?且硬盘很 – 手机爱问...
  14. 人脸识别数据集概况及资源合集
  15. 考研数据结构之栈(2.5)——练习题之求解二次方根A的迭代函数,写出相应的递归算法和非递归算法(C表示)
  16. ​KeePassXC:社区驱动的开源密码管理器​
  17. 一种绝对提高开发水平的方法(转)
  18. 从零开始创建自己的博客
  19. linux里sub用法,awk中gsub和sub 的用法
  20. 单片机c语言程序编写步骤,Proteus运行Keil编写的51单片机C语言步骤

热门文章

  1. Java JDBC数据库简单使用,封装连接,关闭
  2. 【设计模式】工厂系列
  3. matlab四维图形,MATLAB二维、三维、四维绘图
  4. 部署SpringBoot+SpringCloud+Vue项目——半途而废版
  5. 微信小程序开发商品展示(2)
  6. 顺丰(慧眼神瞳)并查集问题
  7. 【python--爬虫】彼岸图网高清壁纸
  8. 如何让一个电机转起来
  9. Android开发之获取网络类型(WIFI、2G、3G、4G)和运营商名称
  10. zimbra mysql stopping_zimbra 邮件服务器管理