AT_abc334_e
令 \(cnt\) 为在未染色前绿色方格的连通块数量,\(v\) 为染色的方格的上下左右四个方格的不同绿色连通块数量
\(E(x) = \sum \frac{1}{v} \times (cnt - v + 1)\)
AT_abc242_d
令 \(f(i, j)\) 为 \(S(i)\) 的第 \(j\) 个字符。
这里将
\(A\) 看成 \(0\)
\(B\) 看成 \(1\)
\(C\) 看成 \(2\)
\(f(i, j) = \left\{ \begin{aligned} & s_{0, j} & i = 0 & \cr & (s_{0, 1} + i) \mod 3 & j = 1 & \cr & (f(i, \frac{j}{2}) + 2) \mod 3 & j \equiv 0 \pmod {2} & \cr & (f(i, \left\lceil \frac{j}{2} \right\rceil) + 1) \mod 3& j \equiv 1 \pmod {2}& \cr \end{aligned} \right.\)
令 \(V = \max \{ k_i \}\)。
时间复杂度:\(O(q \times \log_{2} V)\)
对于第二种转移做解释:
开头的变化如同循环节:\(A \rightarrow B \rightarrow C\)
所以开头字符等于 \((s_{0, 1} + i) \mod 3\)
AT_abc242_e
将字符看成一个 \(26\) 进制数。
构造一个回文串只需知道它的前一半。
所以先求出字符串 \(S\) 的前一半在 \(26\) 进制下为 \(x\)。
那么回文串前一半字典序 \(<\) 前一半字符串 \(S\) 的回文串数量为 \(x\)。
最后维护回文串前一半字典序 \(=\) 前一半字符串 \(S\) 的回文串数量即可。
AT_abc243_d
注意:题目只保证答案不超过 \(10^{18}\),不代表计算过程中不超过 \(10^{18}\)。
从树的角度理解,先从当前节点去到任意一个儿子又回到父节点当前节点不会发生变化,所以栈维护即可。
AT_abc334_f
考虑设计状态:
令 \(dp_i\) 为送完前 \(i\) 个小孩的礼物后回家的最小代价,\(dist(i, j)\) 表示从 \(i\) 号房子走到 \(j\) 号房子的距离,第 \(0\) 号房子为家的下标。
\(dp_i = \min_{max\{ 0, i - k \} \le j < i} \{ dp_j + \sum_{k = j}^{i - 1} dist(k, k + 1) \ + dist(i, 0) \}\)。
令 \(S_i = \sum_{j = 1}^{i - 1} dist(j, j + 1)\)。
\(S_i = S_{i - 1} + dist(i - 1, i)\)
而 \(dp_i\) 的转移又可以写成:
\(dp_i = \min_{max \{ 0, i - k \} \le j < i} \{ dp_j - S_{j + 1} + dist(0, j + 1) \} + S_i + dist(i, 0)\)
法 1
然后 \(\min_{max \{0, i - k \} \le j < i} \{ dp_j - S_{j + 1} + dist(0, j + 1) \}\) 是一个滑动窗口,单调队列维护即可。
时空复杂度:
均为 \(O(n)\)
法 2
由于每次是求出最小值也可用优先队列。
如果当前对头已经非法,弹出优先队列。
时空复杂度:
时间复杂度:\(O(n \times \log_{2} n)\)
空间复杂度:\(O(n)\)
浙公网安备 33010602011771号