一:来源: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从小到大对结构体排序
{