摘要:
按最小值分治。 考虑统计 $l,r$ 内跨过最小值位置 $m$ 的满足条件的区间个数。 遍历 $[l,m],[m,r]$ 中较小的一个区间。设 $s_i=\sum\limits_{j=1}^i b_j$。 $m-l\le r-m$:遍历左端点 $i\in[l,m]$,则右端点 $j\in[m,r]$ 阅读全文
摘要:
【模板】基环树找环 用并查集维护连通性,先把没有环的部分建出来。 考虑加入边 $(u,v)$ 时出现环,则该环由 $(u,v)$ 和树上 $u\to v$ 的路径组成。 从 $u$ DFS 这棵树,记录遍历的路径,遍历到 $v$ 时输出路径即可。 #include <cstdio> #include 阅读全文
摘要:
不知道为啥别的题解直接就快速幂了……感觉这个不容易看出 小数点后第 $n$ 位就是把小数点往后移 $n$ 位后的个位。 根据小学数学知识,把一个数的小数点往后移 $n$ 位相当于把这个数乘以 $10^n$。 所以 $\dfrac ab$ 的第 $n$ 位即为 $\dfrac{a\times 10^n 阅读全文
摘要:
递归。令 D() 返回接下来的一个子表达式的答案。 考虑下一个字符: x:答案接上 x,答案加一。 (:答案接上下一个子表达式,答案加 D()。 ):该子表达式结束,返回答案。 |:答案与下一个子表达式取 $\max$ 后该子表达式结束,返回答案与 D() 的最大值。 #include <cstdi 阅读全文
摘要:
来一些不一样的做法。同余最短路。 以模 $a_1$ 的同余类为点集建图,有边 $[u]\xrightarrow{w}[v]$ 当且仅当 $u+w\equiv v\pmod{a_1}$。 则 $[0]$ 到 $[x]$ 的一条长度为 $d$ 的路径对应一种凑出 $d$ 的方案。 求出 $[0]$ 到其 阅读全文
摘要:
树上倍增+可并堆。 把原图的 MST 建出来,分别考虑非树边和树边的答案。 对于非树边 $(u,v)$,其最大为 $u\to v$ 路径最大值 $-1$ 时,可以替换掉这个最大值,加入 MST。 树上倍增维护路径最大值即可。 对于树边 $(u,v)$,其最大为所有覆盖其的非树边的最小值 $-1$ 时 阅读全文
摘要:
数据范围很小,考虑爆搜。 搜到位置 $(x,y)$ 时统计 $(x,y)$ 的贡献,即 $x$ 行与 $y$ 列的箭靶箭数减一。 容易发现,若此时 $x$ 行或 $y$ 列的箭靶箭数为 $0$,则不能走到 $x,y$,不需要往下搜。(可行性剪枝) 搜索时记录 $z_i$ 表示第 $i$ 步的位置,搜 阅读全文
摘要:
题解一血 & 最优解。 枚举相同子串的内容 $i$,设 $f_o$ 表示从 $o$ 个串中各选一个 $i$ 的方案数, 则对 $j\in[1,n]$,有转移 $f_o\gets f_o+f_{o-1}\times c_{j,i}$,其中 $c_{j,i}$ 表示 $j$ 串中 $i$ 的出现次数。 阅读全文
摘要:
询问的字符串长度很小,答案只可能是询问字符串的子集,所以直接对询问字符串枚举子集。 需要判断枚举出的答案是否合法,即是否为 $a$ 的子序列。预处理 $v_x=\{i|a_i=x\}$。 则对答案 $z$ 遍历 $i\in[1,|z|]$,当前位置 $i$ 在 $a$ 中的位置 $p$ 一定在 $i 阅读全文
摘要:
其实我也没写什么正经做法……不过能过题 对集会位置退火,考虑对任意集会位置 $a,b,c$ 怎么 $O(1)$ 计算答案。 以 $[1,a]$ 的家庭为例,其贡献为 $\sum\limits_{i=1}^at_i(d_a-d_i)=d_a\sum\limits_{i=1}^a t_i-\sum\li 阅读全文