• CSA Round 84 Mahattan Center


    题目

    题目大意

    给定平面上的 $n$ 个点和常数 $k$,求 $x$ 轴上的点 $p$ 到 $n$ 个点中距其最近的 $k$ 个点的距离之和的最小值。两点之间的距离定义为曼哈顿距离。

    数据范围

    $1le k le n le 10^5$ 。

    点的坐标是 $1$ 到 $10^8$ 之间的整数。

    可能有重合的点。

    分析

    A optimization problem can have many possible solutions. Each solution has a value, and we wish to find a solution with the optimal (minimum or maximum) value. We call such a solution an optimal solution, as opposed to the optimal solution, since there may be several solutions that achieve the optimal value.

    对于这种类型的最优化问题(optimization problems),思考的大方向是「降低问题的自由度」。
    具体地说,找决策空间 $U$(或者称之为「状态空间」)的一个子集 $S$,使得 $S$ 满足:

    • 可以在 $S$ 中找到一个最优解
    • $S$ 中元素较少,遍历 $S$ 找最优解是可行的

    如果已经选定 $k$ 个点,要在 $x$ 轴上找一点 $p$ 使得 $p$ 到这 $k$ 个点的曼哈顿距离之和最小。这个问题相当于

    给定 $x$ 轴上的 $k$ 个点,在 $x$ 轴上找一点 $p$ 使得 $p$ 到这 $k$ 个点的距离之和最小。

    这是一个经典问题,解是这 $k$ 的点的中位点(median)。奇数个点的中位点是中间的那个点,偶数个点的中位点是中间的两个点之间的线段上的任意一点(包括两端点)。

    回到原问题,从上面的分析可以得到一个算法:枚举最优解中 $k$ 个点的横坐标的中位点。

    将给定的 $n$ 个点构成的(可重)集合记做 $P$,
    注意到对于 $n$ 个点中的任意 $k$ 个点,必然存在点 $p in P$ 使得 $p$ 的横坐标是选出的 $k$ 个点的横标做的中位点。

    所以我们只需要枚举点的横坐标即可。

    将 $n$ 个点按横坐标从小到大排序,依次记为 $p_1, p_2, dots, p_n$,设第 i 个点的坐标为 $(x_i , y_i)$ 。
    令 $L_i $ 为 $p_1, p_2, dots, p_{i-1}$ 中距 $(x_i,0)$ 最近的 $lfloor n/2 floor$ 个点与 $(x_i, 0)$ 的距离之和,$R_i$ 表示 $p_i, p_{i+1}, dots, p_n$ 中距 $(x_i, 0)$ 最近 $(x_i, 0)$ 最近的 $n - lfloor n/2 floor$ 个点与 $(x_i, 0)$ 的距离之和。

    答案即 $min_{1le i le n} L_i + R_i$

    参考实现


    ### Observation I

    点 $p$ 到 $k$ 个最近点的距离之和一定可以在 $p$ 的横坐标取为 $n$ 个点中某个点的横坐标时取到。

    ### Observation II

  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/Patt/p/9341097.html
Copyright © 2020-2023  润新知