![](https://img-blog.csdnimg.cn/direct/c32a86aac12e4686bca8b04a2c746bbf.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
OI题解
文章平均质量分 94
各种热/冷门题目的题解,有详有略
UnderTheTime
洛谷号:https://www.luogu.com.cn/user/680855
CF号:https://codeforces.com/profile/under_the_time
展开
-
题解:P3569 [POI2014] KAR-Cards
完全可以把交换操作看作两次单点修改,每次只需要考虑一个元素的变化对答案的影响即可。对于一个区间中的元素,显然开头的数越小,该区间能够单调不降的概率越大。次操作,每次操作会交换两个元素的位置,且都需要回答:是否存在一种方案,使得每个元素各选择一个权值后,组成的序列从左到右单调不降。维护这两个值(直接存末尾卡牌选择的值)。在建树、修改的时候用子区间信息进行更新。合并两个相邻区间的信息时,我们枚举左区间。末尾选择的数尽可能小。最终该区间的末尾取决于。,考虑线段树,对于区间。,两个子区间的编号为。原创 2024-06-22 11:42:54 · 876 阅读 · 0 评论 -
题解:CF1019D Large Triangle
条连线按照斜率从小到大排序,然后从小到大枚举,这样任意两点旋转后的横坐标大小关系恰好会变化一次。枚举连线的过程中每次交换两个端点,再在连线的两侧(正负)进行查找即可。个点,海伦公式判断面积是否相等。优化思路即为:对于先枚举的两个点。个点使得它们组成的三角形面积为。就要满足其到这条连线的距离为。个平面上的点,求是否存在。的距离有序,那么就可以。的复杂度二分了,分成在。考虑将所有点进行旋转,使。需要输出三个点的坐标。然后做法就出来了:先把。之上、之下两个部分。原创 2024-06-22 11:40:43 · 898 阅读 · 0 评论 -
P4097 【模板】李超线段树 / [HEOI2013] Segment 题解
这样我们就完成了对完全覆盖的区间的修改。对于其他部分覆盖的区间直接递归左右儿子解决即可。对于查询操作,将自己的答案与左右儿子取个。左右的区间另称为左/右区间),可以发现一定有一个子区间被左或右区间完全包含(浅蓝色被右区间包含),即在两条线段中,肯定有一条线段。我们考虑线段树上被两条线段完全覆盖的一个部分为。)先被加入,显然整个线段在当时就是最优的;因为每次修改操作都需要递归左右儿子,所以加线段的复杂度是。此时深红色的部分没有受到影响,只可能成为右区间最优的线段)。其中,红色线段(记为。原创 2024-05-26 09:48:57 · 592 阅读 · 0 评论 -
题解:CF1016E Rest In The Shades
预处理出挡板长度的前缀和统计这个点的贡献即可。处于阴影中的总距离(深红色线)。的连线被某个挡板相交或接触时,我们说。移动过程中处于阴影内的总时间。个平面上的点,求出这些点在。不相交、不接触的挡板,第。中挡板的占比后,就可以通过。坐标排序,两次二分求出。(灰色、青色部分)求出。原创 2024-05-26 03:30:00 · 343 阅读 · 0 评论 -
题解:CF1370F1 The Hidden Pair (Easy Version)
你可以向评测机询问一个点集,评测机会回答点集中与。的点集,按照上述两种情况二分,最终可以得到深度较大的。距离和最小的点,以及这个距离和。实现没什么难点,注意每次询问/回答都要。每一轮都询问一次深度为。对于第一种情况询问到的点都可能是。个点的树,需要得出树上两个点。个点进行询问,这样就可以得到。为树根,那么对于树中深度为。之间的距离,和一个必定在。中深度较大的点,不妨令。为树根,然后询问深度为。考虑二分,区间下界为。的点集,得到的点即为。原创 2024-05-25 20:29:01 · 381 阅读 · 0 评论 -
题解:CF1370F2 The Hidden Pair (Hard Version)
你可以向评测机询问一个点集,评测机会回答点集中与。的点集,按照上述两种情况二分,最终可以得到深度较大的。距离和最小的点,以及这个距离和。实现没什么难点,注意每次询问/回答都要。每一轮都询问一次深度为。对于第一种情况询问到的点都可能是。个点的树,需要得出树上两个点。个点进行询问,这样就可以得到。感性理解一下,因为我们要处理出。为树根,那么对于树中深度为。较深的一个点,所以深度小于。之间的距离,和一个必定在。的点都不会是那个较深的点。中深度较大的点,不妨令。为树根,然后询问深度为。的点集,得到的点即为。原创 2024-05-25 20:28:05 · 415 阅读 · 0 评论 -
题解:P9535 [YsOI2023] 连通图计数
时的树,树的数量也相同。现在考虑这挨在一起的两个环的方案。我们可以将这两个环拆成类似韦恩图的样子,分为左边环独有部分、左右环公用部分、右边环都有部分三条链。中挑两个点出来,之后的每个点都选择两个位置放在中间,不合法数量(即之后的所有点全都放在一条链上)即为。在树中无连边(即两个环没有公共点,否则就变成一个环了)。次,考虑到两个环位置可以调换但属同一种情况,所以答案要除以二,即为。区别在于,此时只能算出两个环的大小之和,答案类似,即。使用容斥,所有合法的树的数量等于所有减去不合法,即为。原创 2024-05-25 20:27:27 · 263 阅读 · 0 评论 -
2024信友队智灵班春季 Test1 总结
则它们会被一起删除,环会重新接上,这个过程一直重复直到不存在可以删除的元素。这很好想:如果某一时刻还剩下的元素没有被湮灭完,那么此时加入肯定会代替后面的某个元素进行湮灭操作。个打开,如果没有看见自己编号的纸条则所有人都将被处决。计算时从右往左计算(矩阵乘法的结合律),可以降低每一轮乘法的时间复杂度。压根不觉得这个提示是最优策略,以为只是针对于该样例而言可能的一个策略。号盒子,然后根据看到的纸条编号打开对应编号的盒子,直到。),宗旨即为:构造一个答案矩阵和转移矩阵,通过转移矩阵的。的值,则转移矩阵也相同。原创 2024-04-20 08:31:24 · 1289 阅读 · 0 评论 -
[CF825F] String Compression 题解
其中出现循环的子串压缩后长度为:循环节出现次数十进制下的位数+循环节长度,无循环的串也需要压缩。求压缩后的最小长度。这个部分完全压缩后的长度,求法即为:对于每个。分成若干个子串,这些子串全部完全压缩。,注意判断是否能够整除。中无小的循环节(即循环节长度为。个字符进行压缩的最小长度。个字符删除后跑 KMP,求得的。,对其执行 KMP 算法后得到。数组,可能的最小循环节长度。串进行压缩可以认为是把。原创 2024-04-11 18:55:33 · 956 阅读 · 0 评论 -
Day1 省选衔接题 思路总结
在任意一种分隔方案中,都一定存在一种矩形放置顺序,使得每次放置之后,分界线仍然是单调的。所以即使是仅考虑单调的分界线状态,也一定可以搜索到所有状态,这样可以简化状态降低复杂度。然而这样复杂度仍然较高。原创 2024-04-10 21:19:58 · 844 阅读 · 0 评论 -
P4784 [BalticOI 2016 Day2] 城市 题解
边权非负,显然最终选择的边组成一棵树,否则去掉环上一条边后答案更优且不影响连通性。于是本题转化为最小斯坦纳树的模板题,纯粹的模板题在。就可以作为第二种情况的一个起点。每一轮都以这些有值的点为可能的起点跑最短路即可。对于第一种情况,因为我们按照二进制思想压缩状态,所以对于状态。前者直接循环计算,后者可以用类似于最短路的松弛操作计算。点两两可达的情况下选择的边边权和的最小值。条边的无向图,边有正边权。个点被包含)时的答案。,如果在第一种情况的转移完成后,,即连通自己不需要连其他边。个点连通的最小斯坦纳树。原创 2024-03-24 20:13:29 · 1024 阅读 · 1 评论 -
P3639 [APIO2013] 道路费用 题解
最小生成树中这个连通块的部分选择的边就是不变的。所以我们就可以把这么多个连通块缩成一个点,每次跑最小生成树就不再需要考虑这个点的内部边的情况了。中的哪几条边最终被放进了最小生成树中,然后算出这几条边边权最多可以取多少,使得这些边全部都在树中。 条边的边权,使得这些边产生的贡献最大,求这些边的贡献之和。中边的贡献,所以每个连通块内部的边的贡献是不重要的,只需要记录连通块内点的点权之和。中的边后再加的边就是组成连通块的边,对于这些边在合并完。中的某几条边不在最小生成树上,那么说明有更优的。原创 2024-03-20 21:32:32 · 936 阅读 · 1 评论 -
P2934 [USACO09JAN] Safe Travel G 题解
假设需要经过两条及以上的非树边,那么总是有至少一条非树边可以用几条树边拼起来(否则这条非树边就应当是树边)。可以脑补一下走多条非树边的情况,一定存在一个更优的只走一条非树边的路径。个人认为这个并查集更像是记录每个点最近的没被计算过贡献的祖先,加快了在环上跳的过程;从小到大进行排序,每次遍历一遍环上没有被确定答案的点并更新答案,这样可以保证每个点被最优的非树边计算答案,不会重复计算。在环上的点的答案被更新以后,我们把它们全部归到一个并查集里,根节点为。,如果将其加进最短路树中,则会产生一个环,环上的点为。原创 2024-03-18 21:29:45 · 911 阅读 · 1 评论 -
P5629 【AFOI-19】区间与除法 题解
的性质,才可以用两段有重复部分的区间信息合并出大区间的信息。也就是说,它们都可以用相交的两区间的并,推出大区间。进制下为自己的前缀,则后面的求解中肯定会使用前者而不是自己,此时就可以直接退出了。进制下位数越少的原数,它能消除的数越多。并向下取整后与一个被称作“原数”的数相等,则说这个数能被这个原数消除。中的数用了哪些原数去消除尽可能多的元素,最后也就可以。,如果在插入过程中发现了一个原数的结尾,即有一个原数在。我们把所有的原数按照。,这提示我们可以把原数的使用信息用一个。的询问,求在用原数尽可能多的消除。原创 2024-03-04 20:47:13 · 2232 阅读 · 1 评论 -
P4082 [USACO17DEC] Push a Box P 题解
很显然重点落在箱子而不是人的移动上,但箱子的移动依赖于人的移动,人的移动又受到箱子的阻挡。在靠近到箱子的四周时才会对箱子的位置造成影响,所以判断状态是否已经入过队,我们只需记录箱子的坐标和。一个人能推动地图中的箱子,当且仅当他在箱子旁边,且箱子在按照人向箱子移动的方向移动一格后不会卡墙里或。的上面把箱子往下推,则必须有一条不经过箱子的路径使得。的左边把箱子往右推,则没有不经过箱子的路径使。在不经过箱子的情况下,能到箱子上下左右的哪里。的另一面去推动箱子而不使箱子移动,当且仅当。在箱子的哪一面即可。原创 2024-03-03 20:39:39 · 864 阅读 · 0 评论 -
P6381 『MdOI R2』Odyssey 题解
和一张有向无环图,边有边权和长度,求最长的完美路径的长度(路径上边的长度之和)。 取模,则可以在质因数分解的过程中,快速计算出每条边走到下一条边的边权的值。为边的长度(和边权是两个量)。的边(已经对所有质因数的指数取模后的边权)来到点。,和对所有质因数的指数取模后当前边的边权。 进行质因数分解后对应质数的指数和为。转移,先求出当前边的边权的对应边权。考虑分析完美数对的性质。计算最长完美路径的长度,且原图是张。 的倍数,则一定存在正整数。的特判也可以看代码中的注释。的求法可以参考代码中的。原创 2024-03-03 10:21:01 · 814 阅读 · 0 评论 -
P7482 不条理狂诗曲 题解【纯思路】
前两种子区间可以分治递归求解。对于第三种子区间,我们令。选择若干不相邻的数的和的最大值。,我们可以用类似 dp 的方法预处理出。求所有区间的权值和提示我们使用分治。,此时当前区间产生对答案的贡献即为。另一种情况是对称的,处理方法相似。排序,使用双指针计算对应贡献。本文章仅提供解题思路!原创 2024-02-28 17:24:31 · 774 阅读 · 0 评论 -
P9361 [ICPC2022 Xi‘an R] Contests 题解
场比赛的前缀并”来描述下一步能到的所有选手,于是模拟过程中我们可以只维护。步能到达的所有选手。注意到我们永远可以通过“暴力的做法是从小到大枚举步数,并维护不超过。大致题意见题目描述,这里主要解释一下选手。考虑使用倍增加速,预处理每个跳。虽然在第一场比赛中选手。原创 2024-02-28 17:21:32 · 1027 阅读 · 0 评论 -
P8207 [THUPC2022 初赛] 最小公倍树 题解
内的点所构成的无向图的最小生成树中边的边权和。所以我们可以找到这个最小的。,于是考虑枚举这个公因子。最后跑最小生成树即可。两两建边显然不行,考虑优化建边。为确保连通,还需要连一条。尽可能大的点对连边,也就是说。,根据调和级数,最后边的数量。标记为起点,向之后在。,总时间复杂度大约在。原创 2024-02-28 17:18:51 · 690 阅读 · 0 评论 -
P4652 [CEOI2017] One-Way Streets 题解
所以我们考虑把所有的边双缩成一个点,每一个边双中的边都标记为无法定向。这样原来的无向图就变成了一棵树,否则由于是无向图,一定还存在边双连通分量,可以进一步缩成点。首先观察到无向图中的边双连通分量中的边无法被定向。路径中经过一个边双的部分,一定可以像下图一样以另一个方向绕过这个边双。,则说明是它的父亲指向该点;计算每条边的方向时,树链剖分显然可行,但我们也可以采用树上差分。需要求出每条边是否能被确定方向,如果能确定方向则求出它的方向。将每个结点的儿子的差分值累加至父亲的差分值里。,则说明是该点指向它的父亲;原创 2024-02-27 18:46:36 · 806 阅读 · 0 评论 -
P1752 点菜 题解
根据题意,一个可行的贪心方案是:总是让有限制的人群优先选择菜,且限制宽松的人总是吃掉条件更苛刻的(例如更贵的、更难吃的)菜,从而让限制较大的人产生更大的贡献。考虑完所有的菜后,如果还有挑剔的人没有被考虑,此时队列里的菜他们肯定都能吃,所以让他们去尽可能吃光队列里的菜。个人,当前队列里的菜都是他能吃的,后面的人也能吃。贵的菜,而前面的人又都吃了尽可能多的才,则说明这道菜只能由普通人吃,将其弹出并记录,然后考虑队列中第。考虑完所有贫穷的人后,队列里剩下的菜和被记录的菜由剩下的。道菜有美味值和价格两个参数,原创 2024-02-27 18:32:54 · 999 阅读 · 0 评论 -
P5522 [yLOI2019] 棠梨煎雪 题解
因为不会有任何一个字符串匹配该区间。如果确定为某个数,则这一位只有一种可能;否则这一位有两种可能。根据乘法原理,如果有。表示这个区间的信息不合法。转移时从左右孩子进行一下位运算合并。如果两个孩子已确定的。的串当且仅当它们长度相同且对应位置均可匹配。位置有冲突则区间不合法。个位置有两种可能,则本次询问的答案为。,所以一个串每个位置的信息可以用一个。内每个位置的信息也可以用这样一个。个字符,一共有四种可能:确定为。个字符串,每个字符串仅含。考虑对于一段所有字符串的第。分别可以和自己匹配,原创 2024-02-27 18:29:17 · 896 阅读 · 0 评论 -
Progressions Covering 题解
此时发现我们只需要修改两处二次差分后的增加量数组,就可以实现区间加公差为一的等差序列。我们选择一个前面所说的最优区间进行操作,直到该元素满足条件。注意到我们是从后往前进行操作,所以我们可以动态的计算当前元素增加的量。的操作区间尽量末尾处。这样操作可以使操作区间产生的影响最大化,且。不会对当前和还未被扫描的元素产生影响,所以我们不用太在意这个。,即没有满足条件,则最优的操作方案显然为将。维护区间加的过程考虑差分。个元素,且该元素没有满足条件,的区间,区间左端点大于。因为我们是从后往前做的,原创 2024-02-27 18:25:25 · 852 阅读 · 0 评论 -
[ABC254Ex] Multiply or Divide by 2 题解
数组中相同元素出现次数相同的最少操作次数,若无解则输出。这个过程可以用优先队列进行维护。所以我们使用贪心算法。考虑两个数组的最大值。数组执行的操作一转化为对于。进行操作一,等价于将。于是我们便可以把对于。原创 2024-02-27 18:12:29 · 862 阅读 · 0 评论