8.18 总结

T1

发现贪心不太好做,考虑二分答案。

考虑一个答案 \(x\) 合法的条件。发现当答案为 \(x\) 时,每种芒果最多选 \(x\) 个。那么将所有芒果选最多的数量,判断是否足够即可。即 \(\sum_{i_1}^{n}{\min(a_i,x)} \ge x \cdot k\)

在考场上,如果证明比较难,没有太多时间,单调性可以打表观察。

T2

成小丑了。没有看到一次操作的限制,所以不会做,跳过了 T2。

考虑二分长度。长度确定时,发现 check 就是进行一个滑动窗口,单调队列或 st 表都可以,预处理一下差分前缀和就好。

复杂度 \(\mathcal O(n\log n)\)

T3

很经典的一道题目。死因为变量名写错和哈希写错。熟练度还是不够。

对于两个勉强相等的字符串,考虑找出那个不一样的字符。发现有一段前缀相等和一段后缀相等,那么可以二分+哈希找出相等的那个前缀,再判断剩余的后缀是否相等即可。

对于修改,考虑哈希的本质。哈希的本质为字符串的 \(base\) 进制的映射,即可以表示为 \(\sum_{i=1}^{n}{s_i \cdot base^{i-1}}\)。那么可以用树状数组维护前缀和,修改时加上变化量即可。

复杂度 \(\mathcal O(mn\log^2n)\)

T4

分成两部分来做。

  • \(\forall b < 10^6\),直接枚举 \(b\) 即可。

  • \(\forall b \ge 10^6\),这时候 \(x\) 最多只有三位,那么枚举 \(x\),二分十进制下第一个大于 \(y\)\(b\)

这种分段的思想非常好用。


有时候发现直接做不出来时,不妨从答案的角度来考虑问题。无论是二分也好,还是观察答案的性质也好,都是不错的思路。

posted @ 2025-08-20 18:05  Luckies  阅读(12)  评论(0)    收藏  举报