2025.9.27 NOIP 模拟赛 题解
T1 G1064 grid
题意
给定矩形 \(p_{1\sim n,1\sim m}\in\{0,1\}\),定义一条合法路径为 \((1,1)\) 到 \((n,m)\) 坐标不降且只经过 \(0\) 路径,求出能同时选出的路径数量的最大值,满足任意两条路径不互相穿越,且任意两条路径之间的部分存在 \(p_{x,y}=1\),\(n,m\le2000\)
分析
先通过 \(\text{bfs}\) 求出 \(s_{x,y},t_{x,y}\),分别表示 \((1,1)\) 能否到达 \((x,y)\),和 \((x,y)\) 能否到达 \((n,m)\),令 \(p_{x,y}\gets \lnot s_{x,y}\lor \lnot t_{x,y}\),求出 \(p\) 的八连通块,去掉包含 \((1,m)\) 的和包含 \((n,1)\) 的(如果存在),答案为剩下的数量加一
时间复杂度 \(O(nm)\)
T2 G1065 lcp
题意
给定 \(n\times m\) 个字符串 \(s_{1\sim n,1\sim m}\),求出 \(\sum_{i=1}^n \sum_{j=1}^n \max_{k=1}^m \text{lcp}(s_{i,k},s_{j,k})\),\(n\le 10^6,m\le3,\sum|s_{i,j}|\le3\times10^6\)
分析
先 \(\min-\max\) 容斥转化为 \(O(1)\) 个形如求 \(\sum_{i=1}^n \sum_{j=1}^n \min_{k=1}^m \text{lcp}(s_{i,k},s_{j,k})\) 的问题
考虑化简 \(\min_{k=1}^m \text{lcp}(s_{i,k},s_{j,k})\)
对于每个 \(s_{1,1\sim m}\),将 \(m\) 个字符串取到它们中最短的长度,然后交错排列,得到 \(ss_i\),则 \(\min_{k=1}^m \text{lcp}(s_{i,k},s_{j,k})=\left\lfloor\frac{\text{lcp}(ss_i,ss_j)}m\right\rfloor\)
容易用 \(\text{Trie}\) 做到 \(O(nm|\sum|)\)
总时间复杂度 \(O(nm|\sum|)\)
T3 G1066 match
题意
给定长度为 \(n\) 的字符串 \(s\),第 \(i\) 个字符有权值 \(w_i\),字符 \(i\) 和 \(j\) 匹配的代价为 \(100|i-j|+w_i+w_j\),要求 \(s_i\ne s_j\),求出选出 \(n-k\) 个字符并对它们进行匹配的最小代价,或判定无解,\(n\le2500,0\le k\le6,0\le w_i\le10^5,s_i\in\{\text a,\text b,\text c,\text d,\text e,\text f\},2\mid(u-k)\)
分析
令 \(f_{i,j,(u,c),t}\) 表示 \(s_{1\sim i}\) 中还有 \(j\) 个左端点没有匹配右端点,它们的 \(s\) 都是 \(c\)(当 \(u=0\))/ 都不是 \(c\)(当 \(u=1\)),已经忽略了 \(t\) 个,此情况下的最小总代价,显然
答案为 \(\sum_{(u,c)} f_{n,0,(u,c),k}\)
时间复杂度 \(O(n^2k|\sum|^2)\),常数较小
T4 G1067 matrix
题意
给定 \(a_{1\sim n,1\sim n},b_{1\sim n,1\sim n}\),\(k\),保证 \(a\) 每行每列为排列,\(q\) 次操作,给定 \(x\) 令 \(a,b\) 循环下移/右移 \(x\) 的距离,或 \(b_{i,a_{i,j}}\gets b_{i,j},a_{i,a_{i,j}}\gets j\),或 \(b_{a_{i,j},j}\gets b_{i,j},a_{a_{i,j},j}\gets i\),或查询最小的 \(x\) 使得 \(\forall y\ne x,\sum_i [b_{x,i}=b_{y,i}]=k\) 或判定不存在,\(n\le2000,q\le10^6\)
分析
将 \((a,b)\) 记录为 \(n^2\) 个四元组 \((i,j,a_{i,j},b_{i,j})\),则循环下移 \(x\) 等价于变为 \((i+x,j,a_{i,j},b_{i,j})\)(其中 \(i+x\) 需要取模至 \([1,n]\) 中),循环右移 \(x\) 等价于变为 \((i,j+x,a_{i,j},b_{i,j})\),第一种变换相当于 \((i,a_{i,j},j,b_{i,j})\),第二种变换相当于 \((a_{i,j},j,i,b_{i,j})\)
相当于四元组前三项置换并全局加,第四项不变
前三项有 \(6\) 种可能的顺序,对于每种顺序,显然后两项的增量不影响每个 \(x\) 的合法性,考虑预处理出所有合法的 \(x\),则第一项的增量相当于对合法的 \(x\) 列表前缀加后缀减,然后取最小,容易 set 做到单次 \(O(\log n)\),似乎可以优化到 \(O(1)\)
预处理的部分直接做为 \(O(n^2)\) 的
一个 \(x\) 合法当且仅当所有 \(y\ne x\) 都有可重集 \(S_{x,y}=|[y\mid b_{x,i}=b_{y,i}]|=k\),而 \(y=x\) 时 \(S_{x,y}=[x\cdot n]\),\(x\) 合法等价于 \([k\mid i\in U,b_{x,i}=b_{k,i}]=k\cdot [y\mid y\ne x]\cup [x\cdot n]=[i\cdot k\mid 1\le i\le n]\cup [x\cdot (n-k)]\)
令 \(h_{j,v}=[i\mid b_{i,j}=v]\),则 \([k\mid i\in U,b_{x,i}=b_{k,i}]=\bigcup_j h_{j,b_{i,j}}\)
容易用和哈希优化上述过程至 \(O(n^2)\)
总时间复杂度 \(O(n^2+q\log n)\)
比赛结果
\(100+40+10+30\),\(\text{rk}7\)

浙公网安备 33010602011771号