AtCoder Beginner Contest 452 题解

D.No-Subsequence Substring

考虑正难则反,从后往前不断更新 \(s\) 中某个在 \(t\) 中出现的字母位置,然后就可以愉快地从当前位置跳 \(|T|\) 次判断从当前位置开始的子串是否合法并计数了,时间复杂度 \(O(|S||T|)\)

E.You WILL Like Sigma Problem

这个题目看起来就很友善。考虑分类讨论:

  • 对于 \(i<j\) 的情况,直接枚举 \(i\),然后计算 \(a_i \times i\times\sum_{j=i+1}^{n}b_j\) 即可。后面那个求和后缀和预处理一下就行,时间复杂度 \(O(n)\)

  • 对于 \(i>j\) 的情况,考虑枚举 \(j\),由于此时 \(i \bmod j\) 的取值范围是 \([1,j-1]\),所以会发现我们需要求的答案就是对于使得 \(j\le t\times j\le n\) 的每个正整数 \(t\)\(b_j \times \sum_{k=t\times j+1}^{t\times j+j-1} {a_k \times (k-t\times j)}\) 之和。接着再处理一下,直接把式子改成 \(b_j \times (\sum_{k=t\times j+1}^{t\times j+j-1} {a_k \times k}-t\times j \times \sum_{k=t\times j+1}^{t\times j+j-1} {a_k })\),处理好两种前缀和就可以 \(O(1)\) 计算,枚举 \(t\) 的时间复杂度为 \(O(\log n)\),那么时间复杂度就是 \(O(n\log n)\)

总时间复杂度 \(O(n\log n)\),可以通过此题。

posted @ 2026-04-05 09:53  Tiger_Rory  阅读(72)  评论(0)    收藏  举报
//雪花飘落效果