CSA Round 84 Mahattan Center
题目大意
给定平面上的 $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的更多相关文章
- CSA Round #84 The Sprawl
题目 Analysis 曼哈顿距离($L1$ metric)最小生成树. Implementation 下面的代码参考了 gispzjz 在比赛中的提交. #include <bits/stdc ...
- CSA Round 84 Growing Trees
题目 题目大意 给定一棵有 $n$ 个节点的树,边的权值每天变化.对于第 $i$ 条边,在第 $0$ 天,其权值为 $c_i$,每天权值变化 $a_i$(即,在第 $k$ 天,其权值为 $c_i + ...
- CSA Round #54 $\ $Voting
CSA Round #54 \(\ \)Voting 题目大意: 原题网址:戳我戳我! 一次歌唱比赛中,一位歌手刚刚结束表演,评委正在打分. 一共有 \(n\) 位评委,他们每人可以打 \(1\) 分 ...
- Codeforces Beta Round 84 (Div. 2 Only)
layout: post title: Codeforces Beta Round 84 (Div. 2 Only) author: "luowentaoaa" catalog: ...
- 题解-CSA Round#18 Randomly Permuted Costs
Problem CSA Round 18 题意概要:给定一个有重边有自环 \(n\) 点 \(m\) 边的有向无环图(DAG),每条边有其权值,每当你走到一个点 \(x\) 时,所有从 \(x\) 连 ...
- Educational Codeforces Round 84 (Div. 2)
Educational Codeforces Round 84 (Div. 2) 读题读题读题+脑筋急转弯 = =. A. Sum of Odd Integers 奇奇为奇,奇偶为偶,所以n,k奇偶性 ...
- Codeforces Beta Round #5 B. Center Alignment 模拟题
B. Center Alignment 题目连接: http://www.codeforces.com/contest/5/problem/B Description Almost every tex ...
- csa Round #66 (Div. 2 only)
csa66 Risk Rolls Time limit: 1000 msMemory limit: 256 MB Alena and Boris are playing Risk today. W ...
- Bestcoder Round #84
A题 Aaronson http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=718&pid=1001 感觉一 ...
随机推荐
- Vue源码学习一 ———— Vue项目目录
Vue 目录结构 可以在 github 上通过这款 Chrome 插件 octotree 查看Vue的文件目录.也可以克隆到本地.. Vue 是如何规划目录的 scripts ------------ ...
- SQL数据库从高版本导入低版本
1. 打开高版本数据库右键–>任务–>生成脚本–>高级–>选择脚本兼容的版本(也就是低版本)–>拉倒最下面选择架构和数据 2. 在低版本里面,先新建一个数据库,名称要和脚 ...
- HashMap原理以及自己实现HashMap
1.HashMap是什么? HashMap是java常用来存储键值对的数据结构,它是以key/value的形式存储的,它不是线程安全的,Key可以为null值. 2.HashMap的实现原理 Hash ...
- NopCommerce(Core)学习目录
1.NopCommerce下载运行 2.登录及权限 3.日志 4.依赖注入使用autofac 5.插件实现 ...
- eclipse中使用git上传项目
eclipse中使用git上传项目 先需要上传到本地仓库 先找到此选项打钩 再如下 再添加的属性则可以自动填充邮箱和密码 之后 右键选择import 点击找到git 选中 下一步 如果没有找到git ...
- vue.js 三(数据交互)isomorphic-fetch
至于fetch的介绍,在这里就不多说了,官方和网络上的说明不少 之前使用jquery的Ajax朋友,可以尝试一下使用一下这个新的api 推荐使用isomorphic-fetch,兼容Node.js和浏 ...
- ubuntu下vim的简单配置
该文章只是进行符合自己习惯的最基本的配置,更加高级的配置请参考更加有含量的博文! 1.打开vim下的配置文件 sudo vim /etc/vim/vimrc 2.在这个文件中,会有这么一句:synta ...
- 2017 ACM-ICPC EC-Final ShangHai(思维乱搞赛)
感觉全是思维乱搞题. Gym - 101775J Straight Master 给你n种扑克,你每次可以出连续的3 ~ 5 张,问你能否出完. Sample Input 2 13 1 2 2 1 0 ...
- poj2955:Brackets
Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8716 Accepted: 4660 Descript ...
- 【bzoj3339】Rmq Problem
[bzoj3339]Rmq Problem Description Input Output Sample Input 7 50 2 1 0 1 3 21 32 31 43 62 7 Sample ...