abc338解题报告

A

B

C

D

简要题意

思路点拨

考虑对于相邻的两个需要旅行的元素 \((u,v)\) ,我们认为 \(u<v\)

如果一个桥的左端点在 \(u\)\(v-1\) 之间,需要 \(n-v+u\) 的代价。反之只需要 \(v-u\) 的代价。使用差分数组维护即可。

E

简要题意

思路点拨

对于一条边 \(u,v\) 认为 \(u<v\) ,如果存在另一条边某一个端点 $ \in [u,v]$ ,另一个端点不在这个范围就会产生一个交点。容易使用主席树维护。

F

简要题意

思路点拨

考虑使用动态规划法解决。定义 \(f_{i,j}\) 表示目前在节点 \(i\) ,去过的节点集合为 \(j\) 的最短距离。转移分两类讨论:

  • 从没有去过的节点走过来,这一点容易转移。

  • 去一个已经走过的节点,发现这样转移会有环,枚举另一个起点然后走过来。

时间复杂度 \(O(n^2 2^n)\) ,全源最短路不是瓶颈。

G

简要题意

思路点拨

考虑对于一个合法表达式怎么快速计算,贡献显然可以拆分成三个部分:

  • 对于表达式的左端点,找到右边第一个 + 符号,左边的若干乘法称为左边界。

  • 对于表达式的右端点,找到左边第一个 + 符号,右边的若干乘法称为右边界。

  • 对于表达式的剩余部分的每一个 * 组成的连续段而言,容易知道是最初的表达式中是完整的。

对于这三个部分分别计算贡献,第三部分最简单。对于原表达式中的每一个 * 组成的连续段,假设其值为 \(w\) ,区间为 \(l,r\) 贡献就是选择一个左端点的方案乘上选择一个右端点的方案在乘上本身的权值。注意端点需要合法。

对于表达式的左边界,找到对于每一个左边界的值容易计算出来为 \(w\) ,假设其终止位置为 \(r\) ,我们只需要找到一个右端点配对即可。注意端点需要合法。表达式的有边界贡献类似。

时间复杂度 \(O(|S|)\)

posted @ 2024-01-30 20:54  Diavolo-Kuang  阅读(26)  评论(0编辑  收藏  举报