其他分享
首页 > 其他分享> > CF1458C Latin Square

CF1458C Latin Square

作者:互联网

更好的阅读体验

题意

给出一个 \(n\times n\) 的矩阵,每行每列都是一个 \([1, n]\) 的排列,有 \(m\) 次操作

多组测试数据,\(1\le T\le 1000\),\(1\le n, m\),\(\sum n\le 1000,\sum m\le 10^5\)

题解

考虑排列逆的含义

一个排列 \(a\) 可以表示为若干个点 \((i, a_i)\)
根根据排列逆的定义,我们可以发现 \(a\) 的逆 \(a^{-1}\) 可以表示为若干个点 \((a_i, i)\),即交换 \(xy\) 坐标

对于矩阵 \(a\) 我们把它表示为若干个三维的点 \((i, j, a_{i, j})\)
I 操作对应交换 \(yz\) 坐标
C 操作对应交换 \(xz\) 坐标

剩下的操作也很好办
U 操作对应所有 \(x\) 坐标-1
D 操作对应所有 \(x\) 坐标+1
L 操作对应所有 \(y\) 坐标-1
R 操作对应所有 \(y\) 坐标+1

维护各个坐标对应的初始时的坐标和各个坐标的变化量即可

总时间复杂度为 \(\Theta(n^2+m)\)

代码 codeforces submission 142751178

标签:排列,le,矩阵,CF1458C,Latin,坐标,Square,操作,对应
来源: https://www.cnblogs.com/gzezfisher/p/cf1458c.html