切比雪夫距离(bzoj 3210: 花神的浇花集会)

欧氏距离:两点直接线段最短

曼哈顿距离:直角距离

例:二维平面上两点距离


切比雪夫距离:致范数所衍生的度量,又称L∞度量

先看例子:二位平面上两点切比雪夫距离为


(国际象棋中国王从A点到达B点所要走的步数即两者的切比雪夫距离)

n维平面(x1, x2, x3…xn)上的两点切比雪夫距离为


该公式等价于


但是描述两点的不一定只有坐标,还有其他的东西,令pi为空间p点(or向量p or其它)的其中一个度量,qi同理

那么两者之间的切比雪夫距离就定义为


这也等于以下Lp度量的极值



3210: 花神的浇花集会

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 633  Solved: 330
[ Submit][ Status][ Discuss]

Description

在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动。

具体浇水活动详情请见BZOJ3153

但这不是重点

花神出了好多题,每道题都有两个参考系数:代码难度和算法难度

花神为了准备浇花集会的题,必须找一道尽量适合所有人的题

现在花神知道每个人的代码能力x和算法能力y,一道题(代码难度X算法难度Y)对这个人的不适合度为    Max ( abs ( X – x ) , abs ( Y – y ) )

也就是说无论太难还是太简单都会导致题目不适合做(如果全按花神本人能力设题,绝对的全场爆0的节奏,太简单,则体现不出花神的实力)

当然不是每次都如花神所愿,不一定有一道题适合所有人,所以要使所有人的不合适度总和尽可能低

花神出了100001*100001道题,每道题的代码难度和算法难度都为0,1,2,3,……,100000

Input

第一行一个正整数N,表示花神有N个学生,花神要为这N个学生选一道题

接下来N行,每行两个空格隔开的整数x[i],y[i],表示这个学生的代码能力和算法能力

Output

一个整数,表示最小的不合适度总和

Sample Input

3
1 2
2 1
3 3

Sample Output

3


题目的意思就是:给你n个点的坐标,让你找出一个点使得这个点到所有点的切比雪夫距离和最小

可以转化成曼哈顿距离求解

公式:


逆变换就好了,就成了切比雪夫距离转曼哈顿距离

也就是将每个点的坐标更新为(x+y, x-y),然后再分别找x和y的中位数即是答案坐标

但是找到的坐标也是变换过的,按道理来讲,x+y和x-y的奇偶性应该相同,如果答案的坐标奇偶性不同,则说明变换前不是整点,这个时候要判断答案附近的四个点最优的是哪个

#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
using namespace std;
int x[100005], y[100005], dir[4][2] = {1,0,0,1,-1,0,0,-1};
int main(void)
{
	int n, i, ax, j, ay, dx, dy;
	long long ans, sum;
	while(scanf("%d", &n)!=EOF)
	{
		for(i=1;i<=n;i++)
		{
			scanf("%d%d", &dx, &dy);
			x[i] = dx+dy;
			y[i] = dx-dy;
		}
		sort(x+1, x+n+1);
		sort(y+1, y+n+1);
		ax = x[(n+1)/2], ay = y[(n+1)/2];
		ans = 0;
		if(ax%2==0 && ay%2==0 || ax%2==1 && ay%2==1)
		{
			for(i=1;i<=n;i++)
				ans += abs(ax-x[i])+abs(ay-y[i]);
			printf("%lld\n", ans/2);
		}
		else
		{
			for(i=0;i<=3;i++)
			{
				sum = 0;
				dx = ax+dir[i][0];
				dy = ay+dir[i][1];
				for(j=1;j<=n;j++)
					sum += abs(dx-x[j])+abs(dy-y[j]);
				ans = min(ans, sum);
				if(ans==0)
					ans = sum;
			}
			printf("%lld\n", ans/2);
		}
	}
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据中的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像中的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值