# 搅拌机:直接维护矩阵 出题人解法:交换对应行列,旋转时按坐标映射复制到临时矩阵。Codex(GPT-6):标准 C++17 整理、边界验证,以及行列索引表示的补充方案。 ## 操作与正确性 先检查交换参数是否属于当前行数或列数范围。任一参数越界时,只打印错误行,不改矩阵。 行交换把两行对调;列交换逐行交换对应两项。使用零起始坐标时,顺时针旋转满足 $$\mathrm{new}[j][n-1-i]=\mathrm{old}[i][j]$$ 新矩阵有 $m$ 行、$n$ 列。使用独立临时矩阵,全部映射完再替换当前矩阵并交换行列数,避免覆盖尚未读取的格子。 行列交换显然只改变题目指定的对应位置。旋转公式把左上角送到新矩阵右上角,把从上到下的方向变成从右到左;所有 $nm$ 个格子一一映射,正好是顺时针旋转。无效操作保持状态不变,因此对操作数归纳,每次输出都是正确的当前状态。 ## 复杂度 令 $C=nm$ 为不随旋转改变的格子数,$V$ 为合法操作数。合法操作后的输出就需要 $\Theta(C)$ 次数值输出。加上初始化和无效操作,总时间为 $O(C+K+VC)$ ,空间为 $O(C)$ ;旋转临时矩阵另外使用 $O(C)$ 空间。程序用整行容器交换实现行交换,列交换逐行执行。 ## 补充方案与使用 [std.cpp](std.cpp)直接表达操作规则,作为首选。[行列索引方案](solution-alternative.zh.md)与 [alternative.cpp](alternative.cpp)保留初始矩阵,只修改行列排列和转置标记,不移动物品值;它与直接方案并列,均通过完整数据。补充方案降低维护操作本身的工作量,但仍要逐次打印全部状态,因此不能宣称总复杂度低于输出规模。 数据涵盖长条网格、四次连续旋转、最大矩阵、负数和零参数、旋转后维数变化及无效操作后的状态。见 [plan.json](tests/plan.json)与[评测说明](../../../docs/评测环境与性能.md)。