CF1043G Speckled Band
Codeforces Luogu 分析 如果 $[l, r]$ 内不存在两个相同字符,则无解,否则答案至多为 $4$。 于是我们可以对答案进行讨论: 如果答案为 $1$,说明子串形如 $AAAA\cdots$,因此我们可以枚举 $r - l + 1$ 的约数 $d$,并判断其是否存在长度为 $d$ 的周期。 如果答案为 $2$,有三种情况:$AAB$、$ABA$、$BAA$。对于第一种和第...
Codeforces Luogu 分析 如果 $[l, r]$ 内不存在两个相同字符,则无解,否则答案至多为 $4$。 于是我们可以对答案进行讨论: 如果答案为 $1$,说明子串形如 $AAAA\cdots$,因此我们可以枚举 $r - l + 1$ 的约数 $d$,并判断其是否存在长度为 $d$ 的周期。 如果答案为 $2$,有三种情况:$AAB$、$ABA$、$BAA$。对于第一种和第...
先放一点上来,剩下的慢慢更。 ビルの飾り付け 4 / Building 4 不难想到一个 $\mathcal{O}(n^2)$ 的 DP:设 $f_{i, j, 0/1}$ 表示前 $i$ 个数选了 $j$ 个 A,最后一个是 A/B 是否可行,转移显然。最后逆序构造方案即可。 可以发现对于某个 $i, 0/1$,为真的 $j$ 一定是一段区间,因此我们只需要维护这段区间,即可去掉 $j$ ...
Codeforces Luogu 分析 先对 $T_{1..m}$ 建立广义 SAM,然后把 $S$ 丢上去匹配,记录每个前缀匹配到的节点 $pos_i$。 考虑对每个节点维护一棵以 $T$ 的下标为下标的线段树,线段树上的每个节点维护当前串在这些 $T$ 串中的出现次数的最大值及其下标。这可以通过线段树合并预处理出来。 询问时,我们首先找到 $s_{l..r}$ 所在的节点,直接从 $po...
Luogu LOJ 分析 二进制下每一位模 $3$ 的余数是 $1,2,1,2,\cdots$,也可以看成 $1,-1,1,-1,\cdots$。 假设有 $k$ 个 $1$,我们要将其分配到 $\lceil\frac{n}{2}\rceil$ 个 $1$ 和 $\lfloor\frac{n}{2}\rfloor$ 个 $-1$ 上,使得分配到的 $1$ 和 $-1$ 的和是 $3$ 的倍数...
Luogu LOJ 分析 可以发现一个事情:我们把每个值的出现次数看成这个值对应的一根“柱子”的高度,然后把所有柱子向左推倒,那么最少需要修改的数的个数即为 $[1,n]$ 中未被柱子覆盖的数的个数。 于是可以直接用线段树维护,区间平移维护平移标记即可。在平移时两侧的柱子可能会进来、出去,需要及时加入和去除掉。 代码 // ==================================...
Luogu LOJ 分析 先考虑一个贪心。我们把 $d_i$ 从大到小排序,那么每个子树都对应一段区间,我们把儿子按照编号排序,然后把区间依次划分下去即可。 这样子只能通过所有 $d_i$ 互不相同的点,原因是在 $d_i$ 相同时可以通过一些交换使得编号小的点的 $d_i$ 变大。 考虑修正这个贪心。我们维护 $c_i$ 表示 $\leq d_i$ 的可用的难度的个数,那么节点 $u$ 只...
Luogu LOJ 分析 首先容斥一下,求出三段都不包含 $s_{l..r}$ 的方案数,然后用 ${n-1\choose 2}$ 减掉即为答案。 我们先把所有和 $s_{l..r}$ 相等的子串位置都找到,然后分类讨论一下: 如果有三个互不相交的串,方案数是 $0$。 如果最左边的串和最右边的串相交: 考虑 $i$ 的位置: 如果 $i\in[1,l_1)$,那么 $j\in(l_m,...
Luogu LOJ 分析 首先把第 $k$ 大转化掉: 不妨再设一个 $g_{i,j,k}$ 表示子树 $f_{i,j,k}$ 的和,并设 $G_{i,j}(x)=\sum_k g_{i,j,k}x^k$。答案即为 $\sum_{i=k}^n[x^i](\sum_j G_{1,j})$。 看起来这个转移并没有什么可以优化的地方。但是 $F_{i,j}$ 和 $G_{i,j}$ 的最高次项都...
Luogu 分析 没想到差分 /ll 根据要求的东西,不难想到线性基。现在既然有一个区间询问,而且线性基还很好合并,那么可以想到在外面套一层线段树。 问题是区间修改时一个线性基如何整体异或一个值。考虑差分,变成单点修改,直接把叶节点线性基清空然后 pushup 上去即可。 可以证明 $a_{l..r}$ 的线性基和 $a_l\cup(a_i-a_{i-1})_{l+1..r}$ 的线性基是相...
官网 AtCoder LOJ 試験 / Examination 三维偏序板子,CDQ 即可。 代码 ビーバーの会合 / Meetings 首先有一个结论:Query(x,y,z) 返回的是三个点两两之间 LCA 中最深的那个。 我们先在 $[1,n)$ 中随机一个点 $y$,然后询问 $(0,y,z)$,即可求出 $0\to y$ 链上的点以及其它点在链上那个点的子树中。 那么直接递归处理链...