POJ 2185 - Milking Grid (二维KMP)
题意:给出一个字符矩形,问找到一个最小的字符矩形,令它无限复制之后包含原来的矩形。
此题用KMP+枚举来做。
一维的字符串匹配问题可以用KMP来解决。但是二维的就很难下手。我们可以将二维问题转化为一维来做。
首先可以发现这个最小的字符矩形一定是在左上角的。
这样我们对每列枚举它的前缀的长度,如果是能形成重复子串,就记录一下该长度。为了能形成矩形,统计出现R次的最短长度L(一定会有出现R次的长度,最坏的情况下这个长度是C)。
比如:
ABCABCABC(长度为3和9的前缀可以形成重复子串)
ABABABABA(长度为2、4和9的前缀可以形成重复子串)
只有长度为9的前缀在每行都出现了,所以最短长度L=9。
这样我们就得到了最小重复矩形的列数目。
然后将每行的字符串看作一个字符进行KMP,求next数组。它的周期就是R-next[R]。
最终答案就是L*(R-next[R])。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
];
][];
];
int r,c;
void getFail()
{
; i<r; ++i)
{
int j=next[i];
while(j&&strcmp(str[i],str[j])) j=next[j];
next[i+]=(!strcmp(str[i],str[j]))?j+:;
}
}
];
bool match(char *a,char *b)
{
int la=strlen(a);
,j=; i<c; ++i,++j)
{
;
if(a[j]!=b[i]) return false;
}
return true;
}
int main()
{
while(scanf("%d%d",&r,&c)!=EOF)
{
; i<r; ++i)
scanf("%s",str[i]);
memset(cnt,,sizeof(cnt));
; i<r; ++i)
{
; j<c; ++j)
{
word[j]=str[i][j];
word[j+]=;
if(match(word,str[i]))
cnt[j]++;
}
}
getFail();
int x=c,y=r-next[r];
; i<c; ++i)
if(cnt[i]==r)
{
x=i+;
break;
}
printf("%d\n",x*y);
}
;
}
POJ 2185 - Milking Grid (二维KMP)的更多相关文章
- POJ 2185 Milking Grid [二维KMP next数组]
传送门 直接转田神的了: Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6665 Accept ...
- Match:Milking Grid(二维KMP算法)(POJ 2185)
奶牛矩阵 题目大意:给定一个矩阵,要你找到一个最小的矩阵,这个矩阵的无限扩充的矩阵包含着原来的矩阵 思路:乍一看这一题确实很那做,因为我们不知道最小矩阵的位置,但是仔细一想,如果我们能把矩阵都放在左上 ...
- POJ 2185 Milking Grid KMP循环节周期
题目来源:id=2185" target="_blank">POJ 2185 Milking Grid 题意:至少要多少大的子矩阵 能够覆盖全图 比如例子 能够用一 ...
- 题解报告:poj 2185 Milking Grid(二维kmp)
Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that ...
- [poj 2185] Milking Grid 解题报告(KMP+最小循环节)
题目链接:http://poj.org/problem?id=2185 题目: Description Every morning when they are milked, the Farmer J ...
- POJ 2185 Milking Grid(KMP)
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 4738 Accepted: 1978 Desc ...
- 【KMP】POJ 2185 Milking Grid -- Next函数的应用
题目链接:http://poj.org/problem?id=2185 题目大意:求一个二维的字符串矩阵的最小覆盖子矩阵,即这个最小覆盖子矩阵在二维空间上不断翻倍后能覆盖原始矩阵. 题目分析:next ...
- POJ 2185 Milking Grid KMP(矩阵循环节)
Milking Grid Time Limit: 3000MS Memory Lim ...
- POJ 2185 Milking Grid [KMP]
Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8226 Accepted: 3549 Desc ...
随机推荐
- qq被冻结怎么激活
原文章http://jingyan.baidu.com/article/ce436649f43d4d3773afd3f2.html 一些QQ用户可能遇到过QQ被冻结的情况吧!不用着急,小编分享QQ被冻 ...
- webpack安装配置使用教程详解
webpack安装配置使用教程详解 www.111cn.net 更新:2015-09-01 编辑:swteen 来源:转载 本文章来为各位详细的介绍一下关于webpack安装配置使用教程吧,这篇文章对 ...
- java 集合(set)
Interface ListIterator<E> 特有的方法: hasPrevious() 判断是否存在上一个元素. previous() 当前指针先向上移动一个单位,然后再取出当前指针 ...
- signalR的一些细节
获取根目录通过AppDomain.CurrentDomain.BaseDirectory 因为不能直接获取session ,使用的替代方案如下 private static Dictionary< ...
- [saiku] 使用 Apache Phoenix and HBase 结合 saiku 做大数据查询分析
saiku不仅可以对传统的RDBMS里面的数据做OLAP分析,还可以对Nosql数据库如Hbase做统计分析. 本文简单介绍下一个使用saiku去查询分析hbase数据的例子. 1.phoenix和h ...
- IOS-错误总结
1,警告:"xoxoxoxo" is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换掉这个方法即可.2,警告:Declaration of " ...
- webform工程中aspx页面为何不能调用appcode文件夹下的类(ASP.NET特殊文件夹的用法)
App_code 只有website类型的工程才有效. App_Code 下创建的.cs文件仅仅是“内容”不是代码.你设置那个文件为“编译”就行了. 其他特殊文件夹 1. Bin文件夹 Bin文件夹包 ...
- linux下git的安装和使用(转)
转自:http://www.cnblogs.com/sunada2005/archive/2013/06/06/3121098.html 最近在使用github,感觉不错.在windows下,可使用g ...
- JavaScript prototype 属性
prototype 属性使开发人员有能力向对象添加属性和方法. 语法 object.prototype.name=value 实例 在本例中,我们将展示如何使用 prototype 属性来向对象添加属 ...
- Spring MVC Controller中解析GET方式的中文参数会乱码的问题(tomcat如何解码)
Spring MVC Controller中解析GET方式的中文参数会乱码的问题 问题描述 在工作上使用突然出现从get获取中文参数乱码(新装机器,tomcat重新下载和配置),查了半天终于找到解决办 ...