「Log」做题记录 2023.11.27-2023.12.31
2-sat 是显著的。
对于无问号串,直接否定向自己连边即可,然后塞到 Trie 树里。
Trie 树上用子树、路径前缀优化建图即可。
圆方树,点是显著的,割边转换为对应方点即可。
DP 即可。
枚举状态、当前擂主是谁,简单转移即可。
神秘构造。
简单模拟,从
首先考虑总方案数减去不合法方案数,枚举
于是需要求
现在设状态
考虑
考虑删除一些位一定是为了匹配成一个串,否则杂乱的删除一定不优。
设
设
转移是简单的,要么继承之间的值,要么从当前位向后寻找一个串完成匹配。
( 双倍经验)
没啥水平题。
考虑两棵树连起来一定是将两棵树直径中点连起来,然后直径构成是显然的三部分,直接维护即可。
连通性的话放一个并查集即可。
考虑直接二分答案,然后取出每个科目最后的考试时间,这样考试表固定,就可以贪心判断。
值得注意的是,很有可能某一科目在过程中没有出现。
分类讨论,首先是一种买一个,直接取最大就行,考虑同种买两个的情况。
处理一个
没啥水平。
暴力 DP 是显著的,可以用单调队列维护区间最值,有决策单调性所以双指针维护当前点和决策点。
不得不说这题太神秘了。
考虑贪心什么时候是错误的。假设贪心会选择
证明过程很神秘,略了。
状压是显著的,设
考虑对于一个
第一种转移是显然的,第二种考虑预处理一个
题意转化为给定一些点和区间,一个点可以覆盖至多一个它所在的区间,每个区间至少被一个点覆盖,问是否有覆盖方案。
把区间按照右端点排序,然后在 set 里二分合法最靠左点来覆盖区间,找不到就是无解。
首先有一个显著的结论,如果一个数两边都比它大,那么删去这个数是最优的,于是可以用单调栈维护第一步。
删完之后得到一个单峰序列,最优方案经过手玩可以得出是取最大次大外的所有的贡献,这两个数永远取不到。
没法前缀作差,考虑其他做法。
发现了不同的数的个数一共不多,所以可以枚举所有数并进行判断是否在区间内。
没有删除操作就是李超线段树板子,套一个线段树分治即可。
状态是好想的,
有转移
简单题,首先考虑不能直接贪心的原因,两段最短路可能有重叠部分,重叠部分有且只有可能是由
考虑枚举中转点
有点质量的题。
将
首先只考虑加一的操作,枚举最终达到的值
依然固定最终值
当存在加五操作时,花费单调性将不对整个序列存在(比如上一个元素可以通过加五到达目标值,而当前元素只能通过加一操作达到,此时当前花费可能更大。),因此不能直接用队列维护。考虑到将所有余数相同的数拿出来之后仍然具有单调性,所以可以按照余数分类(对
再考虑加五操作的另一种影响,目标值可能不一定是
注意如果
好题。
首先每个字符可以分开考虑,然后对于每个长度,每个匹配的字符位置开一个树状数组。
本质上是判断同余位置的字符相等个数,也就是对于每种字符,每个模数,每个余数开一个树状数组,总计
简单题。
先最小生成树一下,分别考虑树边与非树边的答案,设一个边为
非树边的答案是平凡的,即树上
树边的答案考虑增大到某一时刻一定会被某条较小的非树边取代,所以考虑非树边从大到小路径覆盖即可(取最小值减一)。
特别地,某条边没被覆盖到那也就是必选边,答案为
细节还是有点水平的。
对于一个询问枚举三种情况是显著的,设
对于
神仙题。
主要用到一个性质,多条直径一定至少交于一点或一条边。
考虑一个交点,将直径分为两段,这两段长度可能一样可能不一样(与直径长度奇偶性相关),只需考虑不一样的情况。
设两段端点集合为
每次模拟上述过程,输出两集合大小之和即可。
更加神仙的题!
考虑所有情况中合法的概率,假设每个人随机指定位置随机走,将
结论是所有位置等价,所以占据
结论不知道怎么证明,但感性理解挺正确的。
考虑用队列维护最优前缀,每次加入一个数并尝试扩展一位,不优就舍掉。
下一步从队尾向队首计算,不优就弹掉整个队列后缀。
第一步计算是冗余的,不必判断是否相等,因为在第二步会处理劣解。
用 string 以及内置函数可以大大减小实现难度。
很好的题,注意到一个结论,一个块最多只会被移动一格(保证移动后一定跟原来位置有交)。
于是可以看做在途中移动一个方格,设
其实看似这个 DP 会有一些重复和疏漏,其实正确性是可以证明的,非常巧妙,可惜题解里没人提到这些。(哈哈我也不写!)
我会找时间补充这道题的详细题解。
考虑将
修改的时候就整块重构,这里加个剪枝从修改的位置开始,因为只会向下影响,跑得飞快。
询问是简单的,一直跳坐标直到不能跳为止。
最开始看错题了以为是水题,漏掉了至多选
首先不难想到一些结论:
- 若选定了一些操作,那么操作顺序一定是赋值、加法、乘法。
- 对于一个数来说,赋值至多赋一次。
- 对于一个数来说,一定优先选择大的加法。
- 乘法的贡献与乘的位置无关,只与乘的数有关,所以一定是选最大的一些乘法。
不难想到如果只有乘法和加法,问题也是简单的,因为加法的选择一定从高到低,这样可以计算出选择每个加法的实际贡献,转成乘以一个实数。
然后想到赋值只有一次,对于数字的影响也可以看做加法,于是这题就做完了。
类似二分图的东西,逻辑是有趣的。
首先考虑数字
考虑数字
这实际上是一个类似二分图的东西,可以用并查集瞎维护,建两个虚点表示集合
( 双倍经验)
非常神秘的题目,采用非常神秘的做法,非正解。
记录
正确性非常神秘,将操作序列映射到了原序列,又由于冒泡排序每次必定恰好消灭一个逆序对,所以保证了每次操作都是一个逆序对。
实际上
考虑 DP,分段 DP 是显著的,考虑设
转移时考虑枚举断点进行转移。
不难得出一个结论:对于一个串来说肯定找到最小循环节压缩是最优的,证明是简单的。
于是问题转化为如何
比较平凡的题目。
先正向反向求出每个节点的权值上下界,然后贪心求解方案即可。
考虑排序后分三段构造,设
第一段
第二段
第三段
神秘的 DP 题。
首先不难想到的是把
设 DP 式
考虑第
-
加入某个组,保持此组仍为开放。
-
加入某个组,封闭此组。
-
新建某个组,开放此组。
-
新建一个组,封闭此组。
对于新建一个组需要转移负贡献,也就是
转移是简单的,但此方法复杂度较高,而且第三维会出现负数,比较难处理。
尝试给出一种较为好理解优化的方式。把每个组想象成一条正在延伸的线段(若已封闭那么这条线段不会延伸),左端点是组内最小值,右端点是最大值,考虑加入一个
考虑把贡献都变成差分的形式,第三维没了负数,并且值域变小,转移随便写写即可,时间复杂度
状态是神秘的,设
第三维是巨大的,发现其上限是
非常好题目啊。
考虑令
题意可以简化,对于一个前缀复制粘贴到长度为
记录一个最优前缀,枚举当前前缀,比较两者当前位(
简单题。
我们称能走多次的为正边,只能走一次的为反边,很显然你要么不动,要么走一些正边最后走一次反边。
先 BFS 处理每一个点的层级,然后 DFS 更新即可,通过正边更新
直线上行走能开炮就开炮等价于可以攒能量,拐弯时需要与
尝试二分最后答案,对于所有数字若大于等于
采用一种神秘的
首先有一种显然的做法,即开质数数量棵动态开点线段树,发现可以用 set 替代,就简单地做完了。
发现答案是逆序对数二倍,奇数需要减一,证明是简单的。
状压表示鱼的存活状态,考虑倒序转移即可,注意鱼与鱼相遇的概率相等。
并查集缩点然后判是否存在欧拉通路。
本质上是一些环,考虑构造一些环长互质的环然后 CRT 即可,逆元甚至可以暴力求。
区间不会交错,使得可以根据区间包含关系建出一颗森林,我们添加一组
设
第二维状态仍然很大,但其中有很多无用状态,考虑剪枝。对于一个节点
线段树优化 DP 是显著的,离散一下即可。
答案是一段一段连续的,对于较小的数直接暴力做,对于大的数考虑每次二分一个连续答案段即可。
非常好思维题。
钦定
考虑打时间戳,每次操作对于路径上的点改变颜色为当前操作编号。问题转化为求某路径上颜色相同相邻两点对数,树剖加线段树即可。
平衡树裸题,细节一堆,还算好写。
没看懂
为了方便处理边界,在
考虑给
,则使 。 ,则使 。
题意转化为保留一个
设
首先考虑强制
其中
对于不考虑取第一个的话有转移:
代码是简单的,随便写写即可。
考虑在 DFS 生成树上乱搞。
首先考虑非树边(即返祖边),当它覆盖到的所有树边都只被覆盖一次(只被它覆盖),那么此非树边合法。
对于树边,当它只被非树边覆盖一次,并且此非树边合法,此树边合法。
考虑树上差分处理覆盖次数,然后找合法非树边,暴力判断是否合法,若合法再将其覆盖到的树边标记为合法即可。
神秘的树背包,稍微有点细节的。
设
没啥水平题,建个动态开点权值线段树,维护一下和与数字个数,然后线段树上二分即可。
没啥水平题,Floyd 枚举中转点然后判连通,用 bitset 优化即可。
垃圾翻译,题目里没提到的要求是若此条信息与前些信息矛盾则忽略此信息。
带权并查集维护异或和即可。
对于答案
设
发现这个东西是积性的,即
然后考虑对于每个质因子做一遍 DP,记忆化下来可过。
严格次小生成树板题,倍增维护最大次大值即可。
考虑网络流建模,二分最大送礼物数量作为每个人的总容量,对于每一个限制(一条边),连两个人到其的边,并连向汇点。
能流满即存在合法方案,输出方案考虑哪条边流满了即可。
( 双倍经验)
wqs 二分练习题。
考虑直接求最小生成树,我无法控制加入了多少白边,考虑直接调整白边本身权重,如果我希望多要一些白边那么就让所有白边的权重都减少一些,否则增加,像这样子二分即可。
考虑正确性,首先存在这样一种情况,权重调整值为
本质上相当于我们二分一条直线的斜率去切这个答案的凸包。
暴力是简单的,不难想出
( 多倍经验)
设
只这样 DP 无法控制选择了多少对,用 wqs 二分即可。
二维 DP 是显著的,考虑套 wqs 二分,转移用决策单调性队列二分即可。
( 双倍经验)
数位 DP,主要难点是想到按模数分类进行 DP。
没咋做明白的 DP,考虑以每个点作为根合并子树内链进行计数即可。
看题解之后选择了一种较为优异的写法。
树状数组维护每个位置是否是合法数字,区间修改直接暴力修改,发现此处的值贡献有变再用树状数组进行修改,枚举的复杂度是巨大的,但考虑到每个数递增,并且合法数字数量不多,所以修改次数是少量的,总复杂度大概
按子树大小从大到小枚举合法父亲进行搜索,复杂度是阶乘级别,无法接受。
发现子树大小为
首先转化题意,相当于对于每个边选定其方向,然后合并合法路径减小总代价。
考虑没有
重新考虑原问题,我们设
考虑记录所有的
特别地,考虑
设
以上式子中的
用到了一个奇妙 Trick。
对于每辆车可以考虑二分油箱容量,进行贪心验证,每次不能走了就加油,最后判断加油次数是否小于限制即可。
如果暴力二分是
这样有了一些小剪枝,但发现当答案单调上升的时候复杂度仍然会卡到上界,考虑随机化优化一下。
有如下结论:对于长度为
证明是简单的。对于一个排名为
的数字,需要保证所有比它大的数字都要出现在其后面,则其为一个前缀最大值。我们将排名依次为 的数字作为一个子序列拿出来, 为前缀最大值的概率等价为 在这个子序列中是第一个数的概率,所以有其概率为 。期望个数即 ,积分后可以得到是 的。
所以我们对于每辆卡车随机赋权值,并按照权值排序,这样得到的前缀答案最大值期望个数为
优美的题,感觉很仙。
一般这种题可以先考虑枚举左端点,然后看所有右端点的整体贡献,但这道题要求
设
固定现在枚举到的
所以只需要考虑维护
设
-
:此时区间左侧没有 的倍数,所以我们可以让区间右侧出现至多一个 的倍数,有 。 -
:此时区间左侧有一个 的倍数,所以我们必须让区间包括右侧所有 的倍数,有 。 -
:此时我们不论如何修改 都没有合法的值,因为区间左侧永远有至少两个 的倍数,所以 。
我们知道维护逻辑后考虑维护方式,这个东西是一个区间对某个数取
单纯的维护是较为困难的,我们需要注意到
目前为止还没有提到
最后注意所有
二分这个操作次数,然后处理出来每个人需要走多少步,贪心地向下走,找向下深度最大的能走的位置,如果向下不够就尝试把贡献转移到父节点,前提是父节点是合法点,DFS 判断即可。
设
这一次涂色,
这一次涂色,
这一次涂色,
这一次涂色,
所以有:
当
有这么一个性质,至多只有一个序列没有选满,否则一定可以通过调整得到更优解。
先考虑暴力 DP,用背包即可,现在可以枚举零碎序列,然后将其他的每个序列做
这样复杂度升天,考虑用分治优化,每次处理除了当前
考虑每次修改会影响的只有每段的内部逆序对,可以用 CDQ 预先处理出来每一层的两种逆序对数,根据询问累加并交换即可。
主席树板子,两树联查,树上二分即可。
非常好题目啊。
首先考虑题目让你求的到底是个什么东西,不难看出
分子一共有两部分,第一部分是所有路径的长度和,可以用点分治直接求,但第二部分貌似看起来有点困难。考虑到
考虑转化题意,将原字符串去掉一个字符,在任意一个位置添加一个字符,问能通过这样得到多少个不同的字符串。
考虑直接计数所有情况,并去掉重复贡献。枚举原字符串去掉的字符(相同连续段只枚举一次),添加任意一个字符的方案为
第一种重复情况,假设去掉一个字符后串中有一个字符 a
那么在其左右两侧添加一个字符 a
的效果相同,这样的重复总共有
第二种重复情况,假设原字符串的一个子串 ab
,去掉 a
在 b
后添加 a
的效果,与去掉 b
在 a
前添加 b
效果相同。这种重复存在于所有不同的相邻字符之间,考虑对于枚举的每个不是字符串首位的字符答案都减去
第三种重复情况,对于一种
线段树优化建图板子,自叶子向上、自根向下两棵线段树即可。
树背包板子,设
把贡献式子写出来拆开后发现决策顺序与答案无关,所以变成了经典的分段 DP,决策单调性证出来后斜率优化即可。
当第二个锯木厂
去个重先,连续段都缩到一起。
区间的状态是明显的,设
发现当
于是只要特殊考虑
我真不理解,以后再理解。
真没啥水平,放一条直线上二分即可。
非常好题目。
先
第一个限制是最少需要改变多少数,等价于最多不改变多少数字,求一个最长不降子序列即可。
考虑一个最长不下降子序列,如何调整使得满足第二个限制,设
考虑记录每个位置最长不下降子序列的转移来源,每次对于
添加一个 M
本质上相当于重置循环节开头,因为不能嵌套所以记录一下是否出现 M
然后区间 DP 即可。
对于决策单调性上一个分治处理即可,逆序对可以用树状数组动态维护,搞一个像莫队那样的指针即可,复杂度是对的。
需要动态记录每个数出现次数(除了
枚举模数,要求 DP 后余数为
先套个 AC 自动机上来,然后在 Trie 树上做个数位 DP 即可。
首先考虑暴力 DP了,设
数量级太大了,考虑其中有一些状态本质相同,于是可以先离散化一下,对于离散化中的数据,一段一段是本质相同的,于是上述状态的
于是有:
其中
考虑以下枚举方式进行暴力,
这样发现
DP 状态是显然的,设
这个东西后面的系数显然可以提出来然后前缀和优化转移。
然后考虑统计答案,每次转移的时候记录一个下一次抽取和这一次抽到一样的概率累加到答案上即可。
非常有水平的题。
先枚举相同前缀长度,然后钦定下一位不同,于是问题转化为对于每个
设
值得注意的是下标可能为负,所以做的时候要整体位移一段。
答案即:
发现只关心开头元素差值,考虑枚举差值
把
把前半部分拿出来做以下推导:
然后发现关于第二维做两种前缀和即可,后半部分类似。
纯种 DP。
设
新加入的字符有以下三种功能:
-
拆开以前相邻的相同字符。
-
两个组成一对相邻字符。
-
什么也不干。
贡献用组合数计数是简单的,直接暴力枚举上述三种字符数量进行 DP,注意上下界以及初值问题即可。
没啥水平题,一眼秒了。
先确定数字发现分组是简单的,相当于每个数字可以在左或右,最大值以及两个相同元素位置是固定的,也就是有
考虑选数,先从
有答案:
挺好玩的性质题。
DP状态是显然的,
前三个操作的转移是显著的,考虑第四个操作以及其代价限制起什么作用。
连续的交换不如添加和删除,唯一可以起到的作用是交换两个数,可以考虑删除中间一段,交换两头的字符,再添加中间的一段。
具体的来讲,假设现在正在处理
状态非常显然,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】