Loading

模拟赛8.17 解题报告

T1. 激光通讯(P2937 [USACO09JAN]Laserphones S)

题意:一张 \(n\times m\) 的网格图,有空格有障碍。给出两只奶牛的坐标,求他们之间的路径最少要拐多少次弯。\(1\le n,m\le 100\)

拐弯次数最少 \(\iff\) 直走的段数最少,我们直接 \(\text{BFS}\),取出每个点,更新在同一条直线上的点。

T2. 树

题意:一棵二叉树的中序遍历结果是 \(1...n\),给出层次遍历(左儿子优先),求先序遍历,数据保证有解。 \(1\le n\le3\times 10^5\)

LGJOI 的题真的越来越水了……(不是,你给个模板是什么意思???)

考虑层次遍历的第一个数一定是树的根,设为 \(p\),根据中序遍历,\(p\) 的左子树由 \(1...p-1\) 组成,右子树由 \(p+1...n\) 组成。考虑到可以分治,设 \(\text{solve}(l,r)\) 为求 \(l...r\) 所构成的子树的值。显然 \(l...r\) 中深度最小的是根,我们可以在层次遍历中记录每个数的位置,然后 \(\text{ST}\) 表找出。设找出的这个根为 \(p\),分别递归 \(\text{solve}(l,p-1),\text{solve}(p+1,r)\)

时间复杂度 \(O(n\log n)\)

T3. 石头剪刀布

题意:有一个数列 \(A_{1...n}\),给出 \(A_i\) 可取的数 \(S_i(|S_i|\le 3,\space \forall x\in S_i,\space 0\le x\le 2)\)。设 \(w(A)\)\(A\) 中能连出形如 \(0,1,2,0,1,2,0,1,...\)\(0,1,2\) 开头均可)的子序列最长长度,对于每个 \(k(1\le k\le n)\),求 \(\sum\limits_A [w(A)=k]\)\(1\le n\le 2000\)

一开始想的是二项式反演,但这并不是普通的数数,而是里面套了一层“最长长度”,直接算会出现大量重复。

思考,感觉只能硬 \(\text{DP}\)。设 \(f[i,a,b,c]\) 表示确定了 \(A_{1...i}\),其中以 \(0\) 结尾的子序列最长为 \(a\)\(1\)\(b\)\(2\)\(c\),有多少种方案会到达这样的局面。

\(b_{i,0/1/2}\) 表示 \(A_i\) 是否可取 \(0/1/2\),转移:

\[f[i,a,b,c]\times b_{i+1,0} \rightarrow f[i+1,\max(a,c+1),b,c] \]

\[f[i,a,b,c]\times b_{i+1,1} \rightarrow f[i+1,a,\max(b,a+1),c] \]

\[f[i,a,b,c]\times b_{i+1,2} \rightarrow f[i+1,a,b,\max(c,b+1)] \]

时间复杂度 \(O(n^4)\),显然炸裂。

但是观察到 \(a,b,c\) 的差距不会很大,因为题目需要统计的序列 \(0,1,2,0,1,2,0,1,...\) 很特殊,进一步的,\(b-a\le 1,c-b\le 1,a-c\le1\)

证明:考虑归纳证明,\(a=b=c=0\) 时显然成立。

\((a,b,c)\) 成立,考虑对后面的影响:

  • \((a,b,c)\rightarrow (\max(a,c+1),b,c)\):因为 \(b-a\le 1\),所以 \(\max(a,c+1)\le1\)。仍然有 \(c-b\le 1\),然后又因为 \(a-c\le1,c+1-c\le 1\),所以成立。

剩下的同理。

所以我们设 \(f[i,a,b',c']\) 表示 \(b=a+b',c=a+c'\) 时的答案,总时间复杂度 \(O(n^2)\)

T4. 快递员

题意:一张 \(n\times m\) 的网格图,有空地和障碍。\(q\) 次操作,每次把一个格子状态取反,或者询问 \((x_1,y_1)\rightarrow (x_2,y_2)\)不能往左走的条件下的最短路(\(y_1\le y_2\)),或给出无解。\(1\le n\le5,\space 1\le m\le2\times10^5\space 1\le q\le5\times10^4\)

原题面过于恶心……

现在很气。

然后我们发现这就是个动态 \(\text{DP}\) 的模板,时间复杂度 \(O(mn^3+qn^3\log m)\)

posted @ 2023-08-17 19:58  Lgx_Q  阅读(6)  评论(0编辑  收藏  举报