奶牛矩阵
我们先证明这个子矩阵一定可以放在左上角
假设我们在原矩阵中随便取一个矩阵(这个矩阵不与四条邻边挨着),然后让这个矩阵无限的复制延伸可以覆盖原来的矩阵,那么重新选取一个矩阵,这个矩阵是我们最开始选取的矩阵的每一列往左边走一位而行不变的矩阵,比如下面
其中黑色矩阵是我们最开始选取的矩阵,橙色矩阵是我们现在选取的矩阵,由题,\(k-1\)到\(k\)这一列和\(i-1\)到\(i\)这一列是一样的,那么就可以推出橙色矩阵无限复制并延伸后也能够覆盖原矩阵
那么我们就一直往旁边移动直到移动到左边界
同理我们往上(行减一)移动一格也可以完全覆盖,一直移动到左上角即可
然后我们来说一下二维循环元
KMP这个东西的本质其实是那个算法流程,在中间有一步比较(比如\(A\)的自身匹配,比较\(A[i]\)和\(A[j]\)),这个比较的形式可以有多种,在这一道题目,我们把一整行(一个字符串)当做一个元素,对行求出最小扩展循环节\(K\),在最小扩展循环节的基础上,我们对列求出最小扩展循环节\(S\)就可以得到答案
先来回答为什么这样是最小的
如果我们对一个比\(K\)大的行求出列最小扩展循环节,那么把这个行改成\(K\)显然也是可以的,所以\(K\)的时候最优
然后讲讲怎么求最小扩展循环节
其实就是在蓝书上取消掉整除那个条件即可,充要性可以画图类似证明(证一下,别懒)
求最小扩展循环节的板子题目