「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\) 个的条件。

首先不难想到一些结论:

  1. 若选定了一些操作,那么操作顺序一定是赋值、加法、乘法。
  2. 对于一个数来说,赋值至多赋一次。
  3. 对于一个数来说,一定优先选择大的加法。
  4. 乘法的贡献与乘的位置无关,只与乘的数有关,所以一定是选最大的一些乘法。

不难想到如果只有乘法和加法,问题也是简单的,因为加法的选择一定从高到低,这样可以计算出选择每个加法的实际贡献,转成乘以一个实数。

然后想到赋值只有一次,对于数字的影响也可以看做加法,于是这题就做完了。

\(\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}\)

比较平凡的题目。

先正向反向求出每个节点的权值上下界,然后贪心求解方案即可。

尾声

回家补顿宵夜,好困,睡觉。

posted @ 2023-12-07 07:24  Eon_Sky  阅读(4)  评论(0编辑  收藏  举报