CF1458C Latin Square
题意
给出一个 $n\times n$ 的矩阵,每行每列都是一个 $[1, n]$ 的排列,有 $m$ 次操作
U表示整个矩阵循环下移一格D表示整个矩阵循环上移一格L表示整个矩阵循环左移一格R表示整个矩阵循环右移一格I表示把矩阵每一行变为原来排列的逆R表示把矩阵每一列变为原来排列的逆
多组测试数据,$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$ 坐标-1D 操作对应所有 $x$ 坐标+1L 操作对应所有 $y$ 坐标-1R 操作对应所有 $y$ 坐标+1
维护各个坐标对应的初始时的坐标和各个坐标的变化量即可
总时间复杂度为 $\Theta(n^2+m)$
CF1458C Latin Square