dmy 集训 3.3

困。推歌:勇者

大战模拟赛!

吓哭了!

A

\(p\) 的逆排列 \(q\),若 \(p\) 中没有 \(x\)\(q_x=-1\)

先思考什么时候会产生不合法的情况:如果 \(p_i\) 存在一个长度为 \(3\) 的下降子序列就会有三线共点或者封闭区域。如果存在 \(i<j<k<l\) 使得 \(p_k<p_l<p_i<p_j\) 会产生一个封闭四边形。

我们考虑 \((1,1)\) 连到哪里。如果是 \((2,1)\) 就变成了 \([2,n]\) 的子问题,如果是 \((2,x)(x>1)\),考虑点 \((1,2)\),如果 \((1,2)\) 不与 \((2,1)\) 连边,则肯定会有一个点 \((1,i)(i>2)\)\((2,1)\) 连边。如果此时 \((1,2)\) 连向的点 \((2,j)\) 满足 \(j<x\),那么 \(p_1=x,p_2=j,p_i=1\) 满足 \(p_1>p_2>p_i\),不合法,所以 \(j>x\)。这样考虑所有 \((1,d)(1<d<i)\),发现其连向的 \((2,p_d)\) 一定满足 \(p_d>x\)。此时考虑点 \((2,2)\) 连向的点 \((1,k)\),因为所有编号 \(\le i\) 的点都已经有连边了,所以一定有 \(k>i\)。此时考虑 \(p_1=x,p_2=j,p_i=1,p_k=2\) 满足 \(1<2<i<k\)\(p_i<p_k<p_1<p_2\),也不合法。

所以 \((1,2)\) 一定与 \((2,1)\) 连边。类似的考虑所有 \(2\le i<x\),发现 \((1,x)\) 一定与 \((2,x-1)\) 连边。对这个东西上下翻转,发现如果 \((2,1)\) 连到 \((1,x)\),那么对所有 \(2\le i<x\)\((2,x)\) 一定与 \((1,x-1)\) 连边。

所以最后我们发现,处理完一段前缀后,剩下的一定形如 \(2\times k\) 的网格,或者 \(2\times k\) 的网格上/下第一位向左移一格的情况。对于左移一格的形态做类似的讨论,得出依然需要 \((1,x)\)\((2,x-1)\) 连边或 \((2,x)\)\((1,x-1)\) 连边或上下第一位连边形成子问题。

于是我们可以 dp,设 \(dp_{i,0/1/2}\) 表示已经处理完长度为 \(i\) 的网格前缀,剩下的部分不动/上方第一位左移一格/下方第一位左移一格的方法数。从后往前更新,每次对 \(dp_{i,0}\)\(dp_{i,1}\) 考虑上方第一格连到哪里,对 \(dp_{i,2}\) 考虑下方第一格连到哪里,可以做一个 \(O(n^2)\) 的 dp。

然后我们发现转移一定是从 \(dp_{i+1,*}\) 向后一段区间的 \(p_j=-1\)\(q_j=-1\)\(dp_{j,*}\) 求和,所以可以对这个做后缀和,可以做到单次转移 \(O(1)\),总复杂度 \(O(n)\)

赛时写的全等于官解,但是获得了 0 分???

B,C

咕咕咕??

posted @ 2026-03-03 13:14  Xuan_tmp  阅读(32)  评论(0)    收藏  举报