题意:让你求一个最小的覆盖子矩阵。
分析:首先第一点是确定的:那就是这个子矩阵肯定位于左上角,然后按行考虑,求出每一行可能的重复子串的长度,然后取所有行都存在并且长度最短的长度最为最小子矩阵的宽,
最后按列队长度为宽的字符串进行一次kmp求出循环节的长度。
代码实现:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,m,windth,height; char str[10005][80]; int visited[80],next[10005]; void solve() { int i,j; for(i=0;i<n;i++) str[i][windth]='