CF1458C Latin Square

"本文解析了如何通过理解排列逆的概念,将矩阵操作转换为坐标操作,从而高效解决(n imes n)矩阵的移动问题。通过维护原始坐标和变化量,实现I/C/R/D操作的快速响应,时间复杂度达到(Theta(n^2 + m))。"
摘要由CSDN通过智能技术生成

更好的阅读体验

题意

给出一个 \(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)\)

代码 codeforces submission 142751178

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值