【题解】ABC300 F,G

F.More Holidays

题目分析:

考虑刻画一下我们选择是什么样子的。
考虑我们最后选择的 \(T\) 中的一段一定是形如:一个完整的 S 选择一个后缀 \(+\) 若干个完整的 S \(+\) 一个完整的 S 的前缀。
这样的话就启示我们直接枚举这个前后缀选择的是什么,然后就可以很快算出来了,但是枚举前后缀是 \(O(n^2)\) 的。
考虑优化,其实枚举两个实在是太亏了,考虑只枚举一个可不可以。
假设我们只枚举第一个 S 的删去哪一个前缀,其实就是选择哪一个后缀,假设这个必须要删去的前缀里有 \(t\) 个 x,那么其实也就是说我们从 T 的前缀里最多选择 \(t + k\) 个 x,询问最多使得多少个 o 联通,这个就是直接二分就可以完成了。

G.P-smooth number

题目分析:

看到 \(P\) 那么小,显然可以想到直接搜出来有哪些素数,然后就是枚举这些素数各自选了多少个。
这样看上去复杂度并不是很劣,因为我们选择的总个数不会超过 \(\log_{2} n\)
但是其实看一下样例就知道,直接爆搜是不行的,因为最劣有 \(2\times 10^9\) 个答案。
但是看到答案数其实不是很多,所以就其实我们直接记忆化,也就是说对于 \(n\) 比较小的情况的方案数记下来,以后直接用。
大概记到 \(10^6\) 就可以通过这个题了。

posted @ 2023-05-03 17:50  linyihdfj  阅读(40)  评论(0编辑  收藏  举报