Loading

abc378

A

模拟。

B

模拟。

C

模拟。

D

爆搜。

E

题意

给一个序列 \(A\) 和一个正整数 \(M\),求:

\[\sum_{1 \leq l \leq r \leq N} \left( \left(\sum_{l \leq i \leq r} A_i\right) \mathbin{\mathrm{mod}} M \right). \]

分析

先做个前缀和 \(S\),原式化为:

\[\sum_{1 \leq l \leq r \leq N} (S_r - S_{l-1}) \mathbin{\mathrm{mod}} M, \]

根据 \(S_r\)\(S_{l-1}\) 的大小关系可以分两类。

\[ (S_r - S_{l-1}) \mathbin{\mathrm{mod}} M = S_r - S_{l-1} + \begin{cases} 0 & (S_{l-1} \leq S_r) \\ M & (S_{l-1} > S_r),\end{cases} \]

注意到比 \(S_r\) 大的 \(S_l\) 会对答案产生 \(M\)的贡献,令 \(X_r=\operatorname{size:}\left\{l=1,2,\dots,r | S_{l-1}>S_r \right\}\) 则原式化为:

\[\sum_{r=1}^N \sum_{l=1}^r (S_r - S_{l-1}) \mathbin{\mathrm{mod}} M = \sum_{r=1}^N \left( S_r \times r - \sum_{l=1}^r S_{l-1} + M \times X_r \right). \]

很显然 \(x_r\) 是可以通过扫描线求出的,只要维护一个树状数组即可。

F

题意

给你一棵有 \(N\) 个顶点的树。添加一条边可以得到一个基环树,问有多少种添边方案满足:

  • 图依然是简单图。
  • 循环中所有顶点的度数都是 \(3\)

分析

不难发现一种添边 \((u,v)\) 方式满足题意当且仅当:

  • \(deg_u=deg_v=2\)
  • \((u,v)\) 路径上的其他点 \(p\) 都满足 \(deg_p=3\)

可以记录一个 \(a_u\) 表示与 \(u\) 相连的度数为 \(2\) 的点的数量。先对每个 \(deg=3\) 的点算独立贡献,每新增一个度数为二的点贡献就是当前的 \(a_u\)。再合并不同的三度点,两个集合合并的贡献是 \(a_U \times a_V\),可以用并查集维护。

posted @ 2024-11-04 00:43  tai_chi  阅读(5)  评论(0编辑  收藏  举报