CWOI 2025.3.26 模拟赛

T3 忘了设初始值怒挂 15pts,本来还可以靠 95pts 挤进前八

问就是只改了这两道

T1 公约数神庙

赛时感觉写不出正解,所以直接写了个 Floyd 骗了 80pts 润了。

我们先特判掉几种情况:

  • \(l = r\),有解
  • \(a _ l = 1\)\(a _ r = 1\),无解
  • \(a _ l = 0\)\(a _ r = 0\),当存在 \(k \in [l,r],a _ k \gt 1\) 时有解

我们设 \(dp _ {i,p}\) 表示 \(i\) 后面最近的包含质因子 \(p\) 的位置,则我们的答案等价于 \(\bigvee dp _ {l,p _ r} \le r\)

转移比较简单,我们倒序枚举,每次记录一个 \(pre\),枚举 \(a _ i\) 的质因子,将 \(dp _ {i,k}\) 更新为 $ \min { dp _ {i,k},pre _ k }$,然后拿去更新 \(pre\) 就好了。

T3 城堡考古

\(m \le 6\),并且问方案数,明示状压(其实就是之前做过一道类似的题,那题是状压)。我们先想状压的状态,发现只有竖着放会对下面有影响,则状态 \(S _ i = 1\) 表示上一层需要向下延伸。

我们只需要判断两个相邻状态是否合法。发现,两个状态不能在同一位置都是 \(1\),并且剩下的相邻的 \(0\) 长度必须是偶数。

因此,我们可以设出一个 DP 的状态:\(dp_ {i,S}\) 表示考虑前 \(i\) 列,该列的状态为 \(S\) 的方案数。则 \(dp _ {i,S} = \sum dp _ {i - 1,fr(S)}\),其中 \(fr(S)\) 表示能转移到 \(S\) 的状态集合。

发现这个是线性变换,用矩阵快速幂优化一下就能得到 65pts 的好成绩(直接转移可以得到高达 15pts 的好成绩)。

我们发现,慢的原因是矩阵太大了,打个表可以发现,有用的状态不多,最多只有 \(20\) 个,因此可以用一遍 DFS 来求出有效状态,这样时间复杂度可以优化为 \(O((w = 21) ^ 3 \log 10 ^ {len})\),能过。

还有,出题人为什么一定要写个高精啊,虽然不难但是很烦欸。

posted @ 2025-03-26 20:51  xguagua_233  阅读(45)  评论(0)    收藏  举报