题解:AT_abc375_c [ABC375C] Spiral Rotation
看懂题以后其实也不太难。
题意有点难懂,但是借助样例不难发现第一次操作是把原图按顺时针转 \(90^{\circ}\)。此时再看题面,易得操作就是每次把图的一部分顺时针旋转 \(90^{\circ}\),最开始为整图操作,每次操作后都舍弃当前操作的图的最外层一圈后再进行下一次操作。
看懂题意以后,我们发现直接模拟肯定是不行的,但是我们可以分别对每个点考虑。
具体的,我们设点 \((x,y)\) 一共被操作了 \(k\) 次,因为操作时 \(4\) 次一循环,所以我们只需要考虑 \(k\) 对 \(4\) 取余后的值。
容易发现点 \((x,y)\) 旋转一次后坐标会变成 \((y,n-x+1)\),那么我们只需要执行 \(k\) 次后就可以得到 \((x,y)\) 现在的位置。
这样我们构建一张新矩阵,把原图上的点与其一一对应,最后输出即可。