2025.2

1. [ARC192A] ARC Arc
首先考虑一种连续的染色 CRARCRA...,根据 \(n\mod 4\) 的值分类讨论。

\(0\):刚好可以全部覆盖完。
\(1/3\):无论如何都会剩一个不能覆盖,可以证明不存在其他染色方案了,因为一断开就会有一个不能覆盖。
\(2\):会剩 \(2\) 个空位,尝试把这 \(2\) 个空位移到 \(1\) 上面。
只需要考虑这 \(2\) 个空位的相对位置。

我们填完这两个空位,应当使得这两个空位的长度模 \(4\)\(2\),剩下的就可以全部覆盖。
通过手模,有两种情况:[C]CRAR[C]CR[A]AR[C][] 为空位)。
两空位的长度模 \(4\)\(0/2\),不存在模 \(4\)\(1/3\) 的情况,因为两空位之间的长度模 \(4\)\(3/1\),无论如何都会剩下一个。

2*. P3975 [TJOI2015] 弦论
\(k\) 小子串考虑二分。
那么需要求出状态 \(p\) 的路径条数。
\(t=0\)\(d_i = 1+\sum\limits_{\delta(i,c)}d_{\delta(i,c)}\)
\(t=1\)\(d_i = |\mathrm{endpos}(i)|+\sum\limits_{\delta(i,c)}d_{\delta(i,c)}\)
最后在 SAM 的 DAWG 上二分。

因为 \(\mathrm{len}(p)+1\le \mathrm{len}(\delta(p,c))\),所以可以不用 dfs。

3*. P3649 [APIO2014] 回文串
求所有回文子串中的最大存在值。
存在值为这个子串在 \(s\) 中出现的次数乘以这个子串的长度。

加上了一个回文的条件。
我们建 SAM 后,若采用 P3804 的方法,则需要知道 \([\mathrm{len}(p),\mathrm{len}(\mathrm{link}(p)))\) 内最长的回文串。只知道右端点,这个是不具有良好性质的。

那考虑枚举回文串。
在 Manacher 的过程中,\(p_i\) 的增加是线性复杂度的。
于是我们可以在 \(p_i\) 每自增 \(1\) 时求 \(s[l,r]\) 出现的次数。
若在 DAWG 上暴力匹配,则是 \(O(n)\) 的。
考虑 \(pos(r)\) 维护 \(s[1,r]\) 所在状态。
则我们需要跳到 \(\mathrm{len}(\mathrm{link}(p))\lt l\le\mathrm{len}(p)\) 的状态 \(p\),出现次数就是 \(\mathrm{endpos}(p)\),这个倍增实现。

4. P4248 [AHOI2013] 差异
求任意两个后缀的 \(\operatorname{lcp}\) 的和。
\(\text{reverse}\) 后,转化为两个前缀的最长公共后缀。
考虑 SAM。
考虑 SAM 上分别表示 \(s[1, i], s[1, j]\) 的状态 \(x, y\)

从任意状态 \(P\) 出发跳后缀链接到 \(T\) 的路径,所有状态 \(q\in p \to T\)\(\mathrm{substr}(q)\) 的并集为 \(\mathrm{longest}(p)\)所有后缀

\(\mathrm{longest}(\operatorname{LCA}(x,y))\) 表示 \(\operatorname{lcp}(s[1,i], s[1,j])\)

套路地,对于某个 \(u\),我们统计有多少 \(x, y\) 的 LCA 是 \(u\),这个是简单的。

这道题还可以 SA。

5. P5341 [TJOI2019] 甲苯先生和大中锋的字符串
在出现 \(k\) 次的子串中出现次数的最多的长度。

考虑 SAM。
相当于 \(\mathrm{endpos}(p) = k\) 的状态中,长度 \((\mathrm{len}(\mathrm{link}(p)), \mathrm{len}(p)]\) 都出现一次。
那么这就简单了。

6*. CF125E MST Company
在 Tree I 的基础上构造方案。

特判一些情况,
\(1\) 度数小于 \(k\)
\(1\) 度数为 \(k\) 时不连通。
必选白边大于 \(k\) 条。

贴下界算一次,先连上必选的白边。
那么剩下的边中,只连黑边也能使图连通。
替换一些权值相同的边(要使截距 \(b\) 不变),按权值分组。
首先连上 \(x\) 条必选的白边,然后替换权值相同的边 \(need-x\) 条。

替换 \(need-x\) 条可以直接在 \(x\lt need\) 时相同价值优先选白边。
题解里维护了在同价值优先选白边的情况下,选择大于 \(k\) 的权值的白边的数量。
相当于 A* 里的估价函数,但是在这题是没必要的。

7*. P5233 [JSOI2012] 爱之项链
戒指的方案数就是模板题,记答案为 \(c\)

若不考虑首尾相邻,方案数为 \(n(n-1)^{n-1}\)

做题时的错误思路
首尾相邻不就是最后只有 \(n-2\) 种嘛。

有可能 \(col_1=col_{n-1}\) 导致有 \(n-1\) 种。

考虑减去首尾颜色相同的方案数,这等于 \(col_1\neq col_{n-1}\) 的方案数。
\(f(n)\)\(1\sim n\) 的首尾颜色不同的方案数。

\[\begin{aligned} & f(1)=0 \\ & f(x) = c(c-1)^{x-1} - f(x-1)=\sum_{i=2}^{x} (-1)^{x-i} c(c-1)^{i-1} \\ & (-1)^{x} f(x) = \sum_{i=2}^{x} (-1)^{i} c(c-1)^{i-1} \\ & (-1)^{x}f(x) = \sum_{i=2}^{x}-c(1-c)^{i-1} \\ & (-1)^{x}f(x) = -c \sum_{i=2}^{x} (1-c)^{i-1} \\ & (-1)^{x}f(x) = -c \frac{(1-c)^{x}-(1-c)}{-c} \\ & (-1)^{x}f(x) =(1-c)^{x}-(1-c) \\ & f(x) = (c-1)^{x} + (-1)^{x}(c-1) \end{aligned} \]

题目求的是所有等价类乘以步长,而上式恰求得答案。

\(3214567 \mid m\)
我们考虑将模数变成 \(3214567^2\),这样计算完之后除以 \(m\) 这一步可以先令乘上 \(\dfrac{m}{3214567}\)​ 在模 \(3214567^2\) 意义下的逆元,然后答案除以 \(3214567\)
By tzc_wk

可以这么理解。
\(\sum_{g\in G}m^{c(g)}\)\(mod^2\) 的倍数,答案为 \(0\)
钦定 \(\sum_{g\in G}m^{c(g)} = kmod\)\(mod \not\mid k\)
先计算 \((kmod)\% mod^2\)
然后乘 \(k^{-1}\)(在模 \(mod^2\) 下),这个时候结果一定是 \(mod\) 的倍数,直接除即可。

8*. P2045 方格取数加强版
\(2\) 次是 dp。
\(k\) 次是网络流。

接下来要解决一些问题。

  • 走过了,就没有数了。
  • 走过了,但是还可以走,只是没有数。
  • 恰走 \(k\) 次。
    于是到 \((x,y)\)\(2\) 种。
    第一种,可以取数,容量为 \(1\),表示仅取一次,费用为 \(A_{x,y}\),表示取数。
    第二种,没有数取,容量为 \(+\infty\),费用为 \(0\)

注意到,这个边容量实际上是在点上的,于是拆点。
对每个点 \((x, y)\) 拆为 \(in_{x,y}, out_{x,y}\)

重新理建边。
\(out_u\to in_{x,y}\):容量 \(+\infty\),费用 \(0\)
\(in_{x,y}\to out_{x,y}\):容量 \(1\),费用 \(A_{x, y}\),表示取数。
\(in_{x,y}\to out_{x,y}\):容量 \(+\infty\),费用 \(0\),表示跳过。
这还可以表示,在路径上选择是否取数,而非全取。因为费用为正,一定会取。

考虑源汇,
\(S\to in_{1,1}\):容量 \(k\),费用 \(0\)。(也可以把 \(in_{1,1}\)\(S\),改下流量即可。)
\(T=out_{n,n}\)

跑最大费用最大流

8*. P3358 最长k可重区间集问题
给定 \(n\) 个开区间,选出一些区间,求在满足覆盖任意一点的开区间数量不超过 \(k\) 的条件下,选出区间的长度和的最大值。

"不超过 \(k\)"、每个区间只能选一次,容易想到把区间覆盖次数当作流。
"最大值":把区间长度作为费用。

还有一个问题我们要跑整的区间,而不是跑子区间。这个通过钦定流进入、出去实直线上的点解决。

那么考虑建边,

一个错误的解法,
实直线上,\(x\to x+1\),容量 \(k\),费用 \(1\)
\(S\to l_i\):容量 \(1\),费用 \(0\)
\(r_i\to T\):容量 \(1\),费用 \(0\)
这个存在 \(S\to l_i \to r_j\to T\) 的情况。

为了 \(l_i, r_i\) 一一配对,不把费用摊在实直线上。
注意到,\(l_i\to r_i\) 这样连是很难表示有交的覆盖。

题解中提到了从 \(k\)剥离的做法。
把没有交的区间看成串联,有交的区间看成并联。相当于 \(k\) 次串联,则每个点一定不会覆盖超过 \(k\) 次。

跑最大费用最大流
有两篇比较好的题解:Link 1Link 2

posted @ 2025-02-20 19:36  Nazq  阅读(53)  评论(0)    收藏  举报