初始想法肯定是构造 k=0 的矩阵。
然后 k=1,就直接交换行列。
k=2,就根据根据初始矩阵两个数是否在同一集合和最后要求两个数是否在同一集合进行合并或分拆。
合并,只需将两个数交换到相邻行,然后进行合并,分讨最小次小最大次大是否交换即可。
分拆同理。
发现很多情况跑不出来。
本质原因是矩阵不优,我们考虑手动构造矩阵进行合并和分拆。
观察原矩阵的形式,发现只需要考虑两个数都在 [1,n]∪[n(n−1)+1,n2] 的情况。
此时我们只有查询 i,i+n(n−1) 或 1,n2 或 n,n2 是才需要分拆,放到后面考虑。
考虑合并,无非就是将手动构造将两个数放到同行或同列。
构造矩阵很烦,我们打表。
link
弄出一堆表,找规律就行了。
补充题解没有的几张表。
bi,i=i+[i≥x],bi+1,i=n(n−1)+i+[i≥x−1],b1,n=n(n−1)+x−1,by,n=x
bi,i=i+[i≥x],bi+1,i=n(n−1)+i+1,b1,n−1=n(n−1)+1,b1,n=x
bi,i=i+[i≥x](i≤n−1),bi+1,i=n(n−1)+i+[i≥x−1],b1,n−1=n(n−1),b1,n=x,bn,n=n(n−1)+x−1,an,1=n+1
分拆的情况也考虑在合并的表内了。
把每个表都带到上面算法里就一定能跑出解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话