「Log」2023.12.6 小记
序幕
到校的时候还是黑天,昼夜时间差还在变。
\(\text{6:40}\):暗黑到校。
今天是杂题日,写不动了就去补一下昨天的那篇题解。
随机开题,数据范围比较奇特,一直在考虑从 \(1 \le m \le 10\) 下手。
后来发现 \(m\) 实际没什么突破口,考虑从不能向下走入手。
每次修改都要从自己向下扩展影响到底,这是不优异的,于是就想到分块截断贡献,感觉挺对的,看题解的确是这样。
\(\color{blueviolet}{CF487D}\)
考虑将 \(n\) 分块维护,设 \(to_{x, y}\) 表示从 \((x, y)\) 出发走到的第一个块外位置,特别的,如果从此点出发会停止在此块内那么就记为答案。
修改的时候就整块重构,这里加个剪枝从修改的位置开始,因为只会向下影响,跑得飞快。
询问是简单的,一直跳坐标直到不能跳为止。
\(\color{blueviolet}{CF521D}\)
最开始看错题了以为是水题,漏掉了至多选 \(m\) 个的条件。
首先不难想到一些结论:
- 若选定了一些操作,那么操作顺序一定是赋值、加法、乘法。
- 对于一个数来说,赋值至多赋一次。
- 对于一个数来说,一定优先选择大的加法。
- 乘法的贡献与乘的位置无关,只与乘的数有关,所以一定是选最大的一些乘法。
不难想到如果只有乘法和加法,问题也是简单的,因为加法的选择一定从高到低,这样可以计算出选择每个加法的实际贡献,转成乘以一个实数。
然后想到赋值只有一次,对于数字的影响也可以看做加法,于是这题就做完了。
\(\color{blueviolet}{CF521D}\)
类似二分图的东西,逻辑是有趣的。
首先考虑数字 \(x\),若 \(a - x\) 已经给出了,那么两者一定同集合。证明是简单的,考虑如果 \(x\) 在集合 \(A\),那么 \(a - x\) 一定在集合 \(A\);如果 \(x\) 不在 \(A\) 内,那么 \(a - x\) 也不能在 \(A\),只能在 \(B\) 内。对于 \(b - x\) 同理,所以可以这样合并 \(x, a - x, b - x\)。
考虑数字 \(x\),若 \(a - x\) 未给出,那么 \(x\) 只能在 \(B\) 内,直接塞进去即可。
这实际上是一个类似二分图的东西,可以用并查集瞎维护,建两个虚点表示集合 \(A, B\),按照上述方式进行合并,最后判断两个虚点是否在一块,如果在一块则无解。
\(\color{blueviolet}{CF452F}\)(\(\color{blueviolet}{P2757}\) 双倍经验)
非常神秘的题目,采用非常神秘的做法,非正解。
间幕 \(1\)
伟大的午休,打了一会块,感觉没意思就停止了。
中午吃饭的时候找了好久不知道要看啥,错误的。
不是我咋这么能墨迹呢,草。
午睡,进行强大的超级午睡。
一点半睡到三点,我靠良好睡眠!
起来写题,采用了非常神秘的解法。
\(\color{blueviolet}{CF1375E}\)
记录 \(p_i\) 表示当前 \(a_i\) 最初在什么位置,每次对数组 \(a\) 进行冒泡排序,排序每次交换记录一下 \(p\) 作为答案,并更新 \(p\),需要倒序输出。
正确性非常神秘,将操作序列映射到了原序列,又由于冒泡排序每次必定恰好消灭一个逆序对,所以保证了每次操作都是一个逆序对。
实际上 \(p\) 数组经过一系列排序后相当于原序列的逆排列,而这种做法已经被验证是正确的了,所以此做法也应当正确。
\(\color{blueviolet}{CF825F}\)
考虑 DP,分段 DP 是显著的,考虑设 \(f_i\) 表示以 \(i\) 结尾的前缀的压缩最小长度。
转移时考虑枚举断点进行转移。
不难得出一个结论:对于一个串来说肯定找到最小循环节压缩是最优的,证明是简单的。
于是问题转化为如何 \(O(1)\) 找一个子串的最小循环节,这时候用到一个结论,对于一个长度为 \(n\) 的串,其最短循环节为 \(n - nex_n\)(其中 \(nex_i\) 是 KMP 中求的 border,并且当且仅当此值能整除串长时成立),于是可以 \(O(n^2)\) 预处理每个后缀的 border,剩下的都是平凡的。
\(\color{blueviolet}{CF883B}\)
比较平凡的题目。
先正向反向求出每个节点的权值上下界,然后贪心求解方案即可。
尾声
回家补顿宵夜,好困,睡觉。