做题记录(Sept.)
8 月链接
9 月:
- 上文化课了。
- 备考 CSP。
2025.9.1
- 做真题。
P1099 & P2491
给定一棵 \(n\) 个点的树,求其中一条长度不超过 \(s\) 的路径,使得离这条路径最远的节点到路径的距离最短。
\(1\le n\le 5\times 10^5\)。
结论:
- 这条路径在直径上,这一点在 P1099 中直接给出。
- 每条直径答案相同。
考虑找到直径后,对每个点向非直径上的点扩展,求出最远有多远,双指针求路径的同时滑动窗口求最大值,两端的贡献则是到直径端点的距离。
P1155
给定两个栈,求能否对一个 \(1\) 到 \(n\) 的排列通过在两个栈中按顺序进栈出栈实现排序,第一个栈进出的操作用
ab表示,第二个栈用cd表示。若可以实现,输出字典序最小的方案。\(n\le 10^3\)。
考虑什么情况下某些数不能出现在一个栈里。
结论:若 \(i<j<k\) 且 \(a_k<a_i<a_j\),他们不能在一个栈里被排序。
考虑 \(n^2\) 预处理哪些 \(i\) 和 \(j\) 会受限,连一条边,二分图染色,若会冲突则无解,否则可以。
模拟方案序列,微调输出。见代码,不会描述了。
2025.9.5
- 做真题。
P9753
一种操作,删除两个相邻且相同的字符。求字符串 \(s\) 有多少个非空字串可以通过若干次这种操作变为空串。
\(1\le |s|\le 2\times 10^6\)。
时隔两年杀掉这道题,当初怎么就听不懂老师讲的呢……
性质:用栈记录 \(\left[1,i\right]\) 的子串删完后是什么样子,当有 \(1\le i<j\le n\) 满足两者栈中内容相同时,\(\left[i+1, j\right]\) 满足要求。
知道这个性质后,也很好想怎么证。考虑如何统计相同,可以用 \(trie\) 树,实时记录在树上哪个位置,记录每个位置被走打多少次即可。
2025.9.8
- whk 作业效率太低了,只能口胡一下 ABC。
AT_abc422_d
感觉出差最大是 \(1\),乱搞构造。
AT_abc422_e
随机两个点求直线乱搞。
2025.9.11
- 做原题。
P5021
一颗 \(n\) 个点的树,从上面找 \(m\) 条没有共边的路径,使得最短的路径的长度取到最大值,求最大值。
\(2\le n\le 5\times 10^4,1\le m\le n - 1\)。
先二分答案。
贪心,对于每个点,看他的子树中到它的链的长度,从小到大依次看这条链能否与其他链拼出一条满足要求的链,如果可以,选择其中最短的一条匹配,这样是最优的。最后从没有匹配的链中选出最长的一条向上,为其父亲贡献。

浙公网安备 33010602011771号