题意
找一个最小权值和 二维循环周期。
题解:
一般这种题,都先扔掉最优化的条件,思考如何求解,然后在考虑最优化。
那么如何求解二维循环周期(注意不是循环节)呢?显然对于每一行KMP一下就可以找到每一行的循环周期,对于一个size=p行*q列的周期,意味着column[i] = column[i+q],更具体的说就是 对于每一行r 都有s[r][i] = s[r][i+q] 。这意味着q是每一行的循环周期。那么思路就显然了。我们需要找到所有的n行公共的循环周期,所有m列公共的循环周期。然后进行任意的组合,就可以得到所有循环周期。
如何最优化:考虑任意一个非最小的循环周期(设为p*q):P*Q,有(P>=p&&Q>=q&&!(P==p&&Q==q)).我们知道p*q一定是P*Q的子矩形。。。因为分别可以用P*Q和p*q两种size生成整个矩阵,两个生成矩阵相等。。。所以是显然的。所以既然是子矩阵。。那么肯定选最小的那种阿。。问题变成了权值矩阵固定p*q大小子矩阵的最大值最小问题。
这个就不用二分了吧。。明明可以线性的。。用单调队列单独扫每一行,对于每一个位置(i,j)计算出
maxVal[i][j]=maxk=jj+q−1a[i][k]