hdu 4311 曼哈顿距离

一:来源:https://vjudge.net/contest/233206#problem/B

二:题意:给几个点,选取其中一个点为聚点,要求其他点到这个点的距离(△x+△y)之和最小

三:题解;选取第一个点为聚点,求出其他各个点到第一个点的距离之和dx。

然后x、y轴分别进行操作。

先对x轴进行计算,对x从小到大进行排序,然后递推出公式通过前一个点的dx依次求出其他点依次作聚点的dx。

再对y轴排序,操作同上计算出dy。(主要是用这种方法不会超时,因为数据的原因直接用暴力可能会超时)。

最后遍历一遍所有点,求出最小的dx+dy,输出即可


ps:技巧:

1.设置结构体

2.推规律


四:代码实现:

#include<iostream>
#include<cstring>
#include<algorithm>
#define N 100005
#define ll long long
using namespace std;
//const int maxn = 5e5+10;
struct c
{
	ll x;
	ll y;
	ll dx;
	ll dy; 
}an[N];
bool cmp1(c a,c b)//根据x从小到大对结构体排序 
{
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值