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\) 个,此情况下的最小总代价,显然

\[f_{0,0,(0,0),0}=0\\ t<k:f_{i,j,(u,c),t+1}\gets f_{i-1,j,(u,c),t}+100j\\ j=0:f_{i,1,(0,s_i),t}\gets f_{i-1,j,(u,c),t}+100j+a_i\\ j\ne 0,c=s_i:f_{i,j-1,(1,c),t}\gets f_{i-1,j,(1,c),t}+100j+a_i\\ j\ne 0,c\ne s_i:f_{i,j+1,(1,c),t}\gets f_{i-1,j,(1,c),t}+100j+a_i\\ j\ne 0,c=s_i:f_{i,j+1,(0,c),t}\gets f_{i-1,j,(0,c),t}+100j+a_i\\ j\ne 0,c\ne s_i:f_{i,j-1,(1,c),t}\gets f_{i-1,j,(1,c),t}+100j+a_i\\ j\ne 0,c\ne s_i,q\ne c,q\ne p:f_{i,j+1,(1,q),t}\gets f_{i-1,j,(1,c),t}+100j+a_i\\ \]

答案为 \(\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\)

posted @ 2025-09-30 14:53  Hstry  阅读(68)  评论(0)    收藏  举报