题目

题目大意

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

数据范围

$1\le 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 \rfloor$ 个点与 $(x_i, 0)$ 的距离之和,$R_i$ 表示 $p_i, p_{i+1}, \dots, p_n$ 中距 $(x_i, 0)$ 最近 $(x_i, 0)$ 最近的 $n - \lfloor n/2 \rfloor$ 个点与 $(x_i, 0)$ 的距离之和。

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

参考实现


### Observation I

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

### Observation II

CSA Round 84 Mahattan Center的更多相关文章

  1. CSA Round #84 The Sprawl

    题目 Analysis 曼哈顿距离($L1$ metric)最小生成树. Implementation 下面的代码参考了 gispzjz 在比赛中的提交. #include <bits/stdc ...

  2. CSA Round 84 Growing Trees

    题目 题目大意 给定一棵有 $n$ 个节点的树,边的权值每天变化.对于第 $i$ 条边,在第 $0$ 天,其权值为 $c_i$,每天权值变化 $a_i$(即,在第 $k$ 天,其权值为 $c_i + ...

  3. CSA Round #54 $\ $Voting

    CSA Round #54 \(\ \)Voting 题目大意: 原题网址:戳我戳我! 一次歌唱比赛中,一位歌手刚刚结束表演,评委正在打分. 一共有 \(n\) 位评委,他们每人可以打 \(1\) 分 ...

  4. Codeforces Beta Round 84 (Div. 2 Only)

    layout: post title: Codeforces Beta Round 84 (Div. 2 Only) author: "luowentaoaa" catalog: ...

  5. 题解-CSA Round#18 Randomly Permuted Costs

    Problem CSA Round 18 题意概要:给定一个有重边有自环 \(n\) 点 \(m\) 边的有向无环图(DAG),每条边有其权值,每当你走到一个点 \(x\) 时,所有从 \(x\) 连 ...

  6. Educational Codeforces Round 84 (Div. 2)

    Educational Codeforces Round 84 (Div. 2) 读题读题读题+脑筋急转弯 = =. A. Sum of Odd Integers 奇奇为奇,奇偶为偶,所以n,k奇偶性 ...

  7. Codeforces Beta Round #5 B. Center Alignment 模拟题

    B. Center Alignment 题目连接: http://www.codeforces.com/contest/5/problem/B Description Almost every tex ...

  8. csa Round #66 (Div. 2 only)

    csa66 Risk Rolls Time limit: 1000 msMemory limit: 256 MB   Alena and Boris are playing Risk today. W ...

  9. Bestcoder Round #84

    A题 Aaronson http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=718&pid=1001 感觉一 ...

随机推荐

  1. jstree前端设置默认选中项

    $("#jstree").on("loaded.jstree", function (event, data) { var currDeptId = crm.g ...

  2. python内置函数map/reduce/filter

    python有几个内置的函数很有意 思:map/filter/reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是python列表方法的三架 ...

  3. 操作系统(3)_CPU调度_李善平ppt

    不只上面的四种,比如时间片到了也会引起调度. 具体的调度算法: fcfs简单,但是波动很大. 最高相应比算法,执行时间最长就应该等待的长点,比sjf多了一个等待时间的考虑. 硬件定时器和软件计数器共同 ...

  4. 64位系统InlineHook

    APIHook64Class.h #ifndef APIHOOK64CLASS_H_ #define APIHOOK64CLASS_H_ #include <Windows.h> clas ...

  5. LAMP PHP 详解

    目录 LAMP PHP 详解 LAMP 请求流程与原理 PHP 简介 PHP Zend Engine Opcode php 配置详解 php 加速器 部署LAMP 使用 php 连接 mysql 最基 ...

  6. 二十六、MySQL 临时表

    MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间. 临时表在MySQL 3.23版本中添加,如 ...

  7. JavaScript常用八种继承方案

    更新:在常用七种继承方案的基础之上增加了ES6的类继承,所以现在变成八种啦,欢迎加高级前端进阶群一起学习(文末). --- 2018.10.30 1.原型链继承 构造函数.原型和实例之间的关系:每个构 ...

  8. JavaScript 资源大全中文版

    我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-javascript 是 sorrycc 发起维护的 JS 资源列表,内容包括:包管理器.加 ...

  9. centos 关闭AliYunDun

    执行命令: service aegis stop #停止服务 chkconfig --del aegis # 删除服务

  10. 2、python中的数字

    第二篇开始谈谈python中的数据. 一.前言 python中的数字包含了整数.浮点数.复数三种.在python的早期版本,或许可以看到正数被分为长整数与短整数,后来被取消了,因此这里不作讨论.通常我 ...