题意: 一个r*c的矩形,求一个子矩形通过平移复制能覆盖整个矩形 关于一个字符串的最小覆盖子串可以看这里http://blog.csdn.net/fjsd155/article/details/6866991 把他分成对行和对列,对行覆盖最小就是n - next[n] ,然后求最小公倍数 对列的也是n - next[n], 然后求最小公倍数 #include <iostream> #include <cstdio> #include <algorithm> #inclu…
Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最小覆盖矩阵的面积. analyse: 做了上一篇博客的题目,就会求一个字符串的最小覆盖矩阵.同样的,现在求字符矩阵的最小覆盖矩阵,只是将一维推向了二维,我们在纸上画一下图,你会发现,其实二维的也是so easy! 我们将每一行的字符串的最小覆盖子串求出来,然后对这n个数求LCM,那么结果就是行覆盖的…
Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that is R (1 <= R <= 10,000) rows by C (1 <= C <= 75) columns. As we all know, Farmer John is quite the expert on cow behavior, and is currently wri…
奶牛矩阵 题目大意:给定一个矩阵,要你找到一个最小的矩阵,这个矩阵的无限扩充的矩阵包含着原来的矩阵 思路:乍一看这一题确实很那做,因为我们不知道最小矩阵的位置,但是仔细一想,如果我们能把矩阵都放在左上角该多好,这样一来这一题好像又是循环数组那个样子了(二维的). 而事实上我们确实可以把所有情况都放在左上角,因为矩阵里面的元素的相对位置是不变的,这样一来我们就可以把矩阵看成都是一些元素从左上角往右下角扩充.那么现在问题就又回到了循环节的问题上了,我们可以把矩阵看成是很多很多个字符串组成,我们要找的…
题意:给出一个字符矩形,问找到一个最小的字符矩形,令它无限复制之后包含原来的矩形. 此题用KMP+枚举来做. 一维的字符串匹配问题可以用KMP来解决.但是二维的就很难下手.我们可以将二维问题转化为一维来做. 首先可以发现这个最小的字符矩形一定是在左上角的. 这样我们对每列枚举它的前缀的长度,如果是能形成重复子串,就记录一下该长度.为了能形成矩形,统计出现R次的最短长度L(一定会有出现R次的长度,最坏的情况下这个长度是C). 比如: ABCABCABC(长度为3和9的前缀可以形成重复子串) ABA…
http://poj.org/problem?id=2185 求最小覆盖矩阵,把KMP扩展到二维,行一次,列一次,取最小覆盖线段相乘即可. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; int r,c; ][] = {},a2[][] = {}; ],next2[]; void get_next1() { ,j =…
Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6169   Accepted: 2573 Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that is R (1 <= R <= 10,000) rows by C (1 <= C <= 75…
传送门 直接转田神的了: Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6665   Accepted: 2824 Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that is R (1 <= R <= 10,000) rows by C (1 <…
http://poj.org/problem?id=2185   大概算是我学KMP简单题以来最废脑子的KMP题目了 , 当然细节并不是那么多 , 还是码起来很舒服的 , 题目中描写的平铺是那种瓷砖一样上下对齐的平铺 , 刚开始以为像地砖一样可以交错着铺 . . .  需要两次kmp..我用的是题解的方法写第一次kmp...这样找起来似乎更清晰. http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html 下面是代码 #include<cstdio>…
题意:让你求一个最小的覆盖子矩阵. 分析:首先第一点是确定的:那就是这个子矩阵肯定位于左上角,然后按行考虑,求出每一行可能的重复子串的长度,然后取所有行都存在并且长度最短的长度最为最小子矩阵的宽, 最后按列队长度为宽的字符串进行一次kmp求出循环节的长度. 代码实现: #include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,m,windth,height; ][];…