CF 1900 - 2100 分乱刷
RT,有一说一的是,想干这件事情和 LgxTpre 中的刷题计划很有关系,说白了,也想跟着一块玩/se。
CF1851G Vlad and the Mountains
题目第一遍没读懂捏,感觉语文要重修了。
首先,题目有一个很重要的条件,就是
是否存在一条
S 到T 的路线,使得路线上的所有点都小于等于h_s + e 。
然后就好办了,考虑离线,对边排序,然后对于某个询问,我们让两端点小于等于 NO,否则为 YES。
由于我们对边和询问都排序了,所以只会加边,不会删边,然后做完了,复杂度
实现上还是有点小细节,不过无伤大雅。
CF1857G Counting Graphs
啧,咋最近老读不清楚题面/fn
有一个很强的限制,就是他要求最小生成树为给定树且唯一。
考虑 Kruskal 过程,发现如果有边权相同的情况则必定生成树不唯一,具体证明考虑「P4208 [JSOI2008] 最小生成树计数」这个题。
然后有要求没有重边,所以考虑在
那你和我一样就死了(调了
显然这是一个二项式定理,设
时间复杂度
CF1854A2 Dual (Hard Version)
快难为死我了,真的就构造啥也不会呗/dk.
看完 A1 题解后会的,但是调了半天,不是这挂挂,就是那挂挂/zk
考虑我们可以通过对全是正数做前缀和,对全是负数做后缀和,此时消耗了
我们尝试用绝对值最大值来进行填平,然后显然这是错的。
考虑一下如果不用这个方法,而是用另一个符号的最大值来进行填平,则构造尝试极限情况(例如
然后很巧的是,两方个数一减一加正好又是另一种极限情况。
时间复杂度
CF1847D Professor Higashikata
MD 傻波傻波傻波傻波傻波,读错题了读错题了读错题了读错题了读错题了!!!
考虑重合部分不会影响拿取
现在复杂度瓶颈在统计有效范围上,考虑使用并查集维护右端点,这样统计过得连续段处于同一个颜色,我们跳转的时候就可以直接 find() + 1。
千万别按秩合并!!
时间复杂度
CF1846G Rudolf and CodeVid-23
一个经典的题型,但是我给忘了(芙兰达)
状压成十进制,然后现在我们就可以将每种状态当成节点,然后药物
然后跑
这里需要注意几个问题,就是为了减少重边,我们可以不用链式前向星,而转成用邻接矩阵,这样我们可以加边的过程中去掉重边,不过具体重边的影响多大没试过。
时间复杂度
CF1841D Pairs of Segments
差点被干碎。
我们不妨现将题目要求我们的条件拆一下,换句话说,我们可以选择先满足「两者有交」这条件,再满足「与他者无交」这一条件。这样就好办了,我们不难想到可以将两个有交的线段拍成一个线段,现在我们就可以将问题转化为「最大不相交区间数量」。
时间复杂度
CF1834D Survey in Class
被干碎了。
首先明确题意,题目想让我们求的是所有线段中最大的不交长度。
先假设所有线段都互相包含,这样的话我们将长度最长的那个减去长度最小的那个就是答案。
但是实际上不是相互包含的关系,但是这么算出的答案一定小于正确答案,所以没关系,后面遇到正确答案就好。
现在我们考虑不包含的情况,考虑我们想让答案变大,那肯定是与其相交的区间的左端点越右越大,右端点越左越大。
这样就好办了,我们直接虚拟出来一个线段,左端点
然后统计答案即可,最后别忘了
时间复杂度
CF1830B The BOSS Can Count Pairs
破防了破防了破防了破防了破防了破防了破防了。
首先,仔细阅读题面,我们发现我们的
然后,我们显然存在不等式
此时进行分类讨论,因为有可能存在
-
k = a_i -
k \not = a_i
第一种情况我们实时维护针对
第二种情况我们直接统计即可。
注意:算贡献的时候别忘了判断一下计算出来的边界,否则小心越界。
时间复杂度
CF1823D Unique Palindromes
打球前看出来了一半,打完球又看出来了另一半。
说明运动还是有益于思维的。
性质一:第一次出现的字符算回文串。
性质二:周期为
性质三:
性质四:无解只存在两种情况,一个是长度变化量无法赶上需求变化量,一个是需求量大于长度。
然后做完了,贪心的搞就行了。
(PS:性质四是玩出来的,证明了在构造题中手玩的重要性。)
CF1808D Petya, Petya, Petr, and Palindromes
感觉不如
开个值域桶,然后同个值再分位置上的奇偶。
然后你稍微想一想就能发现对于一个位置,只会对前面的
然后首先你会发现
然后你又会发现,当
然后偶数最好了,偶数是一段连续的。
这样我们就牛逼了,因为我们知道我们贡献区间的上下界,那我们直接在桶里面二分上下界,看看有多少个元素就行了。
然后对每个位置做一遍,这样时间复杂度
什么?你问为啥没有我的提交记录?拜托这么难写的代码根本不想写!
(要是所有 2100 都这么无脑就好了)
CF1696D Permutation Graph
拥抱分治,远离贪心。
考虑无论如何都会经过最大最小值。
所以我们找到当前的最大最小值的位置,然后向下分治。
可以用 ST 表维护区间最大最小值。
时空复杂度
CF1696E Placing Jinas
6。
考虑我们画一下加一的转移方向,然后顺时针旋转
然后推一推每一行的式子,不难发现:
然后这个东西运用一下平行求和法,得:
然后这个东西不出意外的话已经优化到头了,时间复杂度
(推傻波式子就是爽啊)