题目链接
【题意】:
这个就是一个矩阵,然后问,这个矩阵通过往下移动或者往右移动可以有对称矩阵。
最多可以移动(n*m)次。
【题解】:
看了很多人的博客,然后还是胜营兄告诉我的结论我才恍然大悟的。
这个结论首先是:
(x,y)等价于(x+t,y+t)
(x+t,y+t)指的是整个矩阵移动,这个移动是循环的,就是说往右移动,左边的的补过来。
如果(x,y)当前位置的矩阵是对称的,那么(x+t,y+t)是不是也是对称呢???
如果对于任意位置表示为:(i+x,j+y),然后横纵坐标同时减x。
还是等价的:(i,j+y-x)。发现没有其实我们枚举x:1~n 和 y:1~n,
都可以变成枚举两者之间的差值,所以降了一个n。
O(n^4)->O(n^3).
然后答案找到这样的一个差值必须是+n。
为什么呢???因为你只要知道这样的一个差值,那么就说明(i+x,j+y)的位置对称,那么(i+x+1,j+y+1)~(i+x+n,j+y+n)都对称。
所以直接加上n。
#include<bits/stdc++.h>