网站大量收购闲置独家精品文档,联系QQ:2885784924

李超2012国家集训队命题答辩.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
拆弹计划 杭州学军中学 李超 题目大意 在平面上给定N个点 每个点有一个权值 要求找到三个点 使这三个点两两之间曼哈顿距离和 加上每个点的权值的总和最小 最小值为(1+1+2)+(1+2+3)=10 数据范围 为不失一般性 假设所有点的X坐标与Y坐标均互不相同 枚举 枚举三个点,计算并更新答案 时间复杂度为O(N^3) 可以通过数据1~6,期望得到30分 对于100%的数据,我们能够 找到怎么样的算法呢? 简单的情况 考虑两个点的情况 先不考虑权值 计算一个点在另一个点的左下角时的答案 X2+Y2-(X1+Y1) 只和X+Y最大值有关! 按Y坐标从小往大加入点 维护前缀最大值 简单的情况 可以求每个点在四个方向上的最优值 时间复杂度O(NlogN) 点带权值的情况 令点i的权值为Zi 考虑答案的表达式 X2-X1+Y2-Y1+Z1+Z2 =(X2+Y2+Z2)-(X1+Y1-Z1) 维护X+Y-Z的最大值 三个点的情况 包含三个点最小矩形的周长! 三个点只有两种情况 两个点在矩形的对角上 一个点在矩形的内部 一个点在矩形的角上 两个点在矩形的边上 第一种情况 预处理每个点在四个方向的最优点 枚举每个点作为中间点 合并左上与右下的最优解 合并右上与左下的最优解 时间复杂度O(NlogN) 空间复杂度O(N) 第二种情况 第二种情况 只考虑这种情况 其它情况可以通过旋转等方式转化 第二种情况 对于这三个点 2*(X1+Y1-X2-Y3) Y3Y2Y1 X2X3X1 按Y坐标递增顺序插入节点 第二种情况 2*(X1+Y1-(X2+Y3)) 查询节点: 查询该点左下所有点的X2+Y3最大值 更新节点: 用X更新该点右下所有点的X2 +Y3 插入节点: 记录该点的Y坐标 第二种情况 暴力查询、修改是O(N^2)的 区间查询最大值 区间更新最大值 单点插入 线段树! 带权值? 仍然考虑答案的表达式 2*(X1+Y1-X2-Y3) =(2*X1+2*Y1+Z1)-((2*X2-Z2)+(2*Y3-Z3)) 维护 维护方式不变 复杂度分析 求区间最大值:O(logN) 区间更新:O(logN) 插入一个点:O(logN) 总时间复杂度为O(NlogN) 空间复杂度为O(N) 至此,我们已经完美解决了原问题 回顾 要点 预计得分情况 扩展 特殊情况:所有点权值相同时,也可以使用经典的分治算法解决 三个点变为多个点 二维变为多维 曼哈顿距离变为欧几里得距离 …… 接下来我们考虑点带权值的情况。容易发现,我们只要将答案的表达式变一个形,插入时每次不插入X+Y而插入X+Y-Z,更新答案的时候拿X+Y+Z去减掉线段树中它左边的最大值即可。这个算法的时间复杂度仍然为O(NlogN)。 !令点i的权值为Zi !直接考虑带权值的情况 两个点的情况被我们解决了,我们再来看一下三个点的情况。从图中来考虑三个点两两之间曼哈顿距离的实质。比如右边这张图,我们将这三个点两两按曼哈顿最短距离相连,形成了一个矩形,答案即为该矩形的周长;再看下面这张图,容易发现它的答案仍然是个矩形的周长。一个显然的性质是,矩形的每条边上只有一个点,否则我们一定能够收缩这个矩形。矩形有两种情况,一种是如上图,一个点在矩形的角上,两个点在矩形的边上;另一种是如下图,两个点在矩形的对角上,一个点在矩形的内部。接下来我们将分这两种情况进行讨论。 接下来我们讨论第二种情况,即两个点在矩形的对角上,一个点在矩形内部。记Ans(i,j)表示选择点i,j的总代价,由定义可以直接得到下面这个式子,其中dist(i,j)表示i与j两个点的曼哈顿距离。很容易地,我们得到了新的答案的表达式。容易发现,只要1和3在以2节点为原点的二维坐标系上对称,我们就可以通过它们分别的答案算出可能的最优答案。 !图形 首先考虑第一种情况,即一个点在矩形的角上,两个点在矩形的边上。假设所有点都不带权值,不妨设在矩形的角上的点是右上角的点。我们枚举每个点作为矩形右上角的点,考虑如何算出此时矩形周长的最小值。 !如何类推? 画图可知,这三个点组成的矩形的周长为2(X1+Y1-X2-Y3),并且要满足下面两个不等式。容易发现,假如我们仍然按y轴递增的顺序枚举每个点,就可以忽略第一个不等式,转为一个只和第二个不等式有关的问题。下面给出算法。 这次我们在线段树中维护3号节点,每个点上维护在当前能够在3号节点左上角的点的x的最大值,插入节点时更新一个点右边所有已经插入线段树中的点的X+Y最大值,更新答案时查找一个点左下方所有点的X+Y的最大值。同样地我们来看一个例子。 首先插入点(3,1),在线段树的左边找X+Y的最大值,没有找到,在线段树的右边找Y值,也没有找到,最后插入该节点的Y

文档评论(0)

shaoye348 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档