
【算法】Two Pointers
文章平均质量分 89
cz_xuyixuan
这个作者很懒,什么都没留下…
展开
-
【BZOJ1293】【SCOI2009】生日礼物
【题目链接】点击打开链接【思路要点】对于一个左端点\(i\),设最小的合法右端点为\(F_i\)。显然,\(F_i\)是单调不减的,用Two Pointers计算可能的\(F_i\)即可。时间复杂度\(O(NLogN)\)。【代码】#include<bits/stdc++.h>using namespace std; #define MAXN 1000005#define INF...原创 2018-02-27 10:02:57 · 169 阅读 · 0 评论 -
【省内训练2019-06-04】团
【思路要点】旋转坐标系,将曼哈顿距离转化为切比雪夫距离。则我们需要求出一个包含尽可能多的点的正方形。枚举正方形的右边界,用双指针维护左边界,线段树维护其中包含点数最多的区间即可。时间复杂度 O(NLogN)O(NLogN)O(NLogN) 。【代码】#include<bits/stdc++.h>using namespace std;const int MAX...原创 2019-06-07 11:53:27 · 196 阅读 · 0 评论 -
【LOJ6410】「ICPC World Finals 2018」单割故障
【题目链接】点击打开链接【思路要点】不难发现连接两个对角附近的一对点即可构造一组合法解,因此答案应不超过 222 ,我们只需判断答案是否可能是 111 。考虑矩形内两条线段相交的条件,将矩形看做一个环,线段看做一个区间,那么两条线段相交的充要条件为这两条线段对应的区间存在公共部分,但不存在包含关系。因此,我们需要找到环上的一个区间,使得其包含所有线段的恰好一个端点。注意到这...原创 2019-03-22 13:59:30 · 466 阅读 · 0 评论 -
【LOJ6413】「ICPC World Finals 2018」无线光纤
【题目链接】点击打开链接【思路要点】首先,若 M=N−1M=N-1M=N−1 ,那么直接输出原图即可。否则,必然会有一个点度数不同,考虑贪心,尽可能将度为 111 的点连向度不为 111 ,且度数最小的点,制造更多度为 111 的点。若不存在度为 111 的点,则选取度最大的点当做度为 111 的点,连向度数最小的点。使用 TwoPointersTwoPointersTwo...原创 2019-03-21 14:44:51 · 332 阅读 · 0 评论 -
【LOJ6408】「ICPC World Finals 2018」随波逐流
【题目链接】点击打开链接【思路要点】枚举行宽, O(N)O(N)O(N) 计算最长河流长度即可。具体来说,可以作为一个空位的前驱的空位至多有 222 个,且是单调的,因此使用 TwoPointersTwoPointersTwoPointers 来进行一个简单 dpdpdp 即可。时间复杂度 O(N2∣S∣)O(N^2|S|)O(N2∣S∣) 。【代码】#includ...原创 2019-03-20 21:01:59 · 318 阅读 · 0 评论 -
【CodeForces】CodeForces Round #530 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Sum in the tree【思路要点】题目中给出的限制条件相当于限定了所有深度为奇数的点及其父亲的权值和,显然,将深度为偶数的非叶节点的权值设置得尽可能大有利于减少全局权值和。时间复杂度 O(N)O(N)O(N) 。【代码】#include&lt;bits/stdc++.h&gt;usi...原创 2019-01-20 11:30:34 · 651 阅读 · 0 评论 -
【LOJ2262】「CTSC2017」网络
【题目链接】点击打开链接【思路要点】首先,本题一点重要的观察是,新建的路径的两个端点必定在树的直径上,若一个方案新建路径的两个端点有一个不在直径上,我们令其向直径靠近,不会使答案变劣。因此,我们可以将直径拿出来考虑,令直径上点数为 tottottot ,每一个点为 posipos_iposi , posipos_iposi 与 posi−1pos_{i-1}posi−1 ...原创 2018-11-02 21:30:52 · 992 阅读 · 1 评论 -
【BZOJ3281】小P的烦恼
【题目链接】点击打开链接【思路要点】为每一条原图中的边新建一个点,建出 DAGDAGDAG 的以 SSS 为根的支配树, TTT 到 SSS 路径上每一个代表边的点就是每一条必经的边。求出相邻的两条边之间的最短路,用 TwoPointersTwoPointersTwoPointers 解决剩余问题即可。时间复杂度 O((N+M)Log(N+M))O((N+M)Log(N+M)...原创 2018-09-20 14:38:29 · 531 阅读 · 0 评论 -
【CodeForces】CodeForces Round #511 (Div. 1) 题解
【比赛链接】点击打开连接【题解链接】点击打开链接**【A】**Enlarge GCD【思路要点】令所有数的 gcdgcdgcd 为 ggg ,将所有数除去 ggg ,问题变为了所有数的 gcdgcdgcd 为 111 的情况。我们要选出一个最大的数集,使得这个数集中的数存在不为 111 的公因数。显然我们只需要考虑所有质数即可,线性筛求出每个数的最小质因子,质因...原创 2018-09-25 11:22:38 · 402 阅读 · 0 评论 -
【CodeForces】CodeForces Round #505 (Div. 1 + Div. 2) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Doggo Recoloring 【思路要点】 首先当N=1N=1N=1,答案为YesYesYes。 否则,当且仅当存在一个字符出现了至少两次,答案为YesYesYes。 时间复杂度O(N)O(N)O(N)。 【代码】 #include...原创 2018-08-23 14:18:38 · 534 阅读 · 0 评论 -
【CodeForces】CodeForces Round #405 (Div. 1) 题解
【比赛链接】 点击打开连接 【题解链接】 点击打开链接 **【A】**Bear and Different Names 【思路要点】 首先生成NNN个不同的合法名字。 按照如下方式构造一组解: 保证前k−1k−1k-1个名字互不相同。 若si=YESsi=YESs_i=YES,令Ansi+k−1=AnsiAn...原创 2018-08-20 17:20:31 · 334 阅读 · 0 评论 -
【BZOJ5328】【SDOI2018】物理实验
【题目链接】点击打开链接【思路要点】旋转、平移坐标系,使得直线导轨为X轴。注意到所有线段互不相交,且与X轴没有交点。对一二和三四象限的线段分别做一遍扫描线,求出每一段在X轴可见的线段到X轴的投影点以及其真实长度和投影长度的比值,并将一二和三四象限的结果合并。我们放置激光发射器的位置是无限多的,但投影点的个数是有限多的,并且我们发现一定有至少一个最优解满足激光发射器的某一个端点恰好为一个投影点。Tw...原创 2018-05-31 13:36:48 · 525 阅读 · 0 评论 -
【BZOJ4653】【UOJ222】【NOI2016】区间
【题目链接】BZOJUOJ【思路要点】将区间按照长度排序,一系列区间\([l_x,r_x],[l_{x+1},r_{x+1}]...[l_y,r_y]\)中可以选出一组合法的解当且仅当被这些覆盖次数最多的点被覆盖了至少\(M\)次。我们希望使得\(x\)和\(y\)尽可能接近,不难发现,\(y\)是关于\(x\)单调的,因此可以使用Two Pointers求出每一个\(x\)对应的最近的\(y\)...原创 2018-05-29 20:14:22 · 204 阅读 · 0 评论 -
【CodeForces】CodeForces Round #477 (Div. 1 + Div. 2) 题解
【比赛链接】Div. 1Div. 2【题解链接】点击打开链接【Div.2 A】Mind the Gap【思路要点】从小到大枚举答案,检查合法性。时间复杂度\(O(Ans*N)\)。【代码】#include<bits/stdc++.h>using namespace std;const int MAXN = 100005;template <typename T> vo...原创 2018-05-07 20:04:26 · 1694 阅读 · 1 评论 -
【BZOJ4858】【JSOI2016】炸弹攻击 2
【题目链接】点击打开链接【思路要点】枚举发射源,将发射源当做原点,对敌人和激光塔极角排序。由于敌人纵坐标均为正,而其它点均为负,因此每两个角度差在\(\pi\)以内的激光塔内部的敌人的个数之和就是该发射源对答案的贡献。用前缀和以及Two Pointers可以在\(O(N)\)的时间内统计一个发射源的贡献。时间复杂度\(O(N^2LogN)\)。【代码】#include<bits/stdc++...原创 2018-04-16 18:22:17 · 499 阅读 · 0 评论 -
【BZOJ5099】【POI2018】Pionek
【题目链接】点击打开链接【思路要点】如果我们得知了最终答案的方向,那么显然,我们会选取在该方向上投影为正的向量作为答案,而放弃投影为负的向量。虽然方向是无法枚举的,但不难发现连续的一些方向导致我们选择的向量集合是相同的,我们实际上只需要枚举这样的向量集合就可以了。将向量极角排序,并复制一份,用Two Pointers维护当前的向量集合即可。时间复杂度\(O(NLogN)\)。【代码】#includ...原创 2018-03-18 14:17:28 · 532 阅读 · 0 评论 -
【省内训练2019-07-01】Ring
【思路要点】对于一个边集的右端点 iii ,应当存在阈值 lftilft_ilfti ,满足左端点在 lftilft_ilfti 左侧时答案为 YesYesYes ,否则答案为 NoNoNo ,且不难发现 lftilft_ilfti 是单调的。使用类似 TwoPointersTwoPointersTwoPointers 的思想用 LCTLCTLCT 计算 lftlftlft 数组即可...原创 2019-07-01 13:25:39 · 246 阅读 · 0 评论