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})\),能过。
还有,出题人为什么一定要写个高精啊,虽然不难但是很烦欸。