HDU 4312 最小切比雪夫距离-转化成曼哈顿距离再分治

题意:二维空间,n个点,求以某点为起点到各点的最小切比雪夫距离

分析:

上一道题之前已经用“分治“思想在O(n)的时间内求出了n个点,以某点为起点到各点的最小曼哈顿距离,那么我们根据二维空间切比雪夫距离和曼哈顿距离的关系,可以把切比雪夫距离转化成曼哈顿距离,再直接用之前的方法即可。

二维空间:

曼哈顿距离 :d=|x1-x2|+|y1-y2|,到某点的曼哈顿距离为r的点组成一个边长为√2*r的正方形,且边与坐标轴成45度

切比雪夫距离:d=max(|x1-x2|,|y1-y2|),到某点的切比雪夫距离为r的点组成一个边长为2*r的正方形,且边与坐标轴平行

在二维平面我们可以发现边长为r的切比雪夫正方形旋转45度,就变成了边长为2*r的曼哈顿正方形,旋转公式是:x‘=x+y,y‘=y-x。所以我们只需在上面一题的代码中加上这个坐标转化,结果输出ans/2就行了

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#define INF 1000000000000007
using namespace std;
struct node{
	long long x,y;
	long long sum;
}a[100005];
bool cmp1(node a,node b)
{
	return a.x<b.x;
}
bool cmp2(node a,node b)
{
	return a.y<b.y;
}
int main(){
	int t,n;
	cin>>t;
	while(t--){
		cin>>n;
		long long ans=INF;
		memset(a,0,sizeof(0));
		for(int i=0;i<n;i++){
			cin>>a[i].x>>a[i].y;
			long long tmp=a[i].x;
			a[i].x+=a[i].y;
			a[i].y-=tmp;
		}
		sort(a,a+n,cmp1);
		long long sum=0;
		for(int i=0;i<n;i++){
			a[i].sum=i*a[i].x-sum;
			sum+=a[i].x;
		}
		sum=0;
		for(int i=n-1;i>=0;i--){
			a[i].sum+=sum-(n-1-i)*a[i].x;
			sum+=a[i].x;
		}
		sort(a,a+n,cmp2);
		sum=0;
		for(int i=0;i<n;i++){
			a[i].sum+=i*a[i].y-sum;
			sum+=a[i].y;
		}
		sum=0;
		for(int i=n-1;i>=0;i--){
			a[i].sum+=sum-(n-1-i)*a[i].y;
			sum+=a[i].y;
			ans=min(ans,a[i].sum);
		}
		cout<<ans/2<<endl;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-04 19:14:55

HDU 4312 最小切比雪夫距离-转化成曼哈顿距离再分治的相关文章

bzoj 3170 Tjoi 2013 松鼠聚会 曼哈顿距离&amp;&amp;切比雪夫距离

因为曼哈顿距离很好求,所以要把每个点的坐标转换一下. 转自:http://blog.csdn.net/slongle_amazing/article/details/50911504 题解 两个点的切比雪夫距离为d=max(|x1?x2|,|y1?y2|)   写一下曼哈顿距离的常用处理方法 两个点(x1,y2),(x2,y2) 其曼哈顿距离=|x1?x2|+|y1?y2| 因为|x1?x2|=max(x1?x2,x2?x1) 所以可以写成=max(x1?x2+y1?y2,x1?x2+y2?y1

各种距离 欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准欧氏距离、马氏距离、余弦距离、汉明距离、杰拉德距离、相关距离、信息熵

1. 欧氏距离(Euclidean Distance) 欧氏距离是最容易直观理解的距离度量方法,我们小学.初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离. 二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离: 三维空间点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离: n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离(两个n维向量): Matlab计算欧氏距离: Matlab计算距离使用pdist函数.若X是一个m×n的矩阵,

HDU 4311 Meeting point-1 &amp;&amp; HDU 4312 Meeting point-2

这俩个题  题意::给出N(<1e5)个点求找到一个点作为聚会的地方,使每个点到达这里的距离最小.4311是 曼哈顿距离 4312是 切比雪夫距离: 曼哈顿距离 :大家都知道 对于二维坐标系a(xa,yb),b(xb,yb)的曼哈顿距离是abs(xa-xb)+abs(ya-yb): 看的出来这个距离和x,y 都有关,但是X,Y并不相互影响,所以可以分开计算这样,分开计算的好处如下: 如果 只给一个维度的坐标系 ,我们是不可以再什么养的复杂度的时间内处理出来呢? 大难还是很好想的先排序一下,会发现

HDU 4311,4312 Meeting point(曼哈顿距离,切比雪夫距离)

 题意: 面上n个点,某点到其他点的曼哈顿距离最小和,切比雪夫距离最小和. 思路:对于切比雪夫距离可以转化为哈密顿距离,方法是将每个点的坐标逆时针旋转45度然后放大sqrt(2)倍,换成坐标表示也就是(x,y)->(x-y,x+y). 对于第一个问题,求曼哈顿距离最小和,也就是sum(xj-xi)+sum(yj-yi). 如果直接求时间复杂度无法承受. 所以我们可以先对x排序,对于从左到右的sum(x)我们可以递推出来,即sumx[tj[i].id] = sumx[tj[i-1].id] +

HDU 4311&amp;4312 Meeting point-1&amp;2 (曼哈顿距离&amp;&amp;切比雪夫距离)

HDU 4311 题意:平面上有n个点,一个点(x,y)只能到达(x-1,y), (x+1,y), (x, y-1), (x, y+1)4个点.从n个点中找到一点,使其他点到此点的距离之和最小. 思路: 可以发现,两个点间距离为 |x1-x2| + |y1-y2| ,这便是两点间的曼哈顿距离. 朴素的做法是遍历所有点,枚举该点与其他点间的曼哈顿距离之和,但是会TLE: 取巧的做法是将所有点与中心点的曼哈顿距离排序,枚举中间大概250个点左右的情况比较即可(不要欺负人家数据水! 正确姿势: 用结构

Hdu 4312-Meeting point-2 切比雪夫距离,曼哈顿距离,前缀和

题目: http://acm.hdu.edu.cn/showproblem.php?pid=4312 Meeting point-2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1231    Accepted Submission(s): 691 Problem Description It has been ten years s

!HDU 4311 最小曼哈顿距离-思维&amp;卡时间-(横纵坐标分开算,排序)

题意:有n个点,求以这n个点中的某一点为起点,到各点的曼哈顿距离和最小是多少 分析: 暴力枚举又要超时,这种题一般都是考思维了,多半都是用技巧找到一个高效的方法.个人觉得这题跟上一篇文章的题是一个类型.这种思想要记住. 这题也是用"分治",虽说题目要求的是曼哈顿距离,但是我们为什么真的就要一步到位的求呢,可以横纵坐标分开求,先x排序,然后遍历一遍,求出横坐标的距离,然后y排序,遍历一遍求出坐标的距离加在刚才求得的x的距离上,就是曼哈顿距离了. 这里有一个非常巧妙但是其实很显而易见的东西

HDU4312 Meeting point-2 (切比雪夫距离&amp;&amp;曼哈顿距离)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4312 题意:给定平面坐标上n(n<=100000)个点,然后在其中选一个,使得所有点到当前点的Chebyshev距离和最小. 分析: 切比雪夫距离:设a(x1,y1),b(x2,y2);DIS = max(|x1-x2|,|y1-y2|) = (|x1-x2+y1-y2|+|x1-x2-y1+y2|)/2; 我们将点aa的坐标看成(x1+y1,x1-y1),bb的坐标看成(x2+y2,x2-y2)

BZOJ 1516 [POI2006]Mag-Warehouse 切比雪夫距离转曼哈顿距离

题意: 给定一个网格图,其上有一堆坏点(整点,同一位置多个),求一个整点,使得该整点到所有的坏点的切比雪夫距离之和最小. 求这个整点位置. 无SPJ 解析: 看完题懵了,我只会曼哈顿距离啊怎么办. 然后就无聊查了下给定的那个计算公式,哇塞这居然叫切比雪夫距离. 噫怎么有个链接是谈切比雪夫转化曼哈顿距离的. 噫看完后我就会这道题辣! 对于原坐标系中两点间的 Chebyshev 距离,是将坐标轴顺(逆)时针旋转45度并将所有点的坐标值放大sqrt(2)倍所得到的新坐标系中的Manhattan距离的二