poj 2185(二维kmp)
题意:让你求一个最小的覆盖子矩阵。
分析:首先第一点是确定的:那就是这个子矩阵肯定位于左上角,然后按行考虑,求出每一行可能的重复子串的长度,然后取所有行都存在并且长度最短的长度最为最小子矩阵的宽,
最后按列队长度为宽的字符串进行一次kmp求出循环节的长度。
代码实现:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m,windth,height;
char str[][];
int visited[],next[]; void solve()
{
int i,j;
for(i=;i<n;i++)
str[i][windth]='\0';
i=;j=-;next[]=-;
while(i<n)//按列进行kmp求出最小子矩阵的高
{
if(j==-||strcmp(str[i],str[j])==)
{
i++;j++;
next[i]=j;
}
else
j=next[j];
}
height=n-next[n];
printf("%d\n",windth*height);
} int main()
{
int i,j;
int x,y;
while(scanf("%d%d",&n,&m)!=EOF)
{
getchar();
memset(visited,,sizeof(visited));
for(i=;i<n;i++)//求出每一行都有的最小重复子串作为宽
{
scanf("%s",str[i]);
for(j=m;j>=;j--)
{
x=;y=;
for(;str[i][x]!='\0';x++,y++)
{
if(y==j)
y=;
if(str[i][x]!=str[i][y])
break;
}
if(str[i][x]=='\0')
visited[j]++;
}
}
for(i=;i<=m;i++)
if(visited[i]==n)
break;
windth=i;
solve();
}
return ;
}
poj 2185(二维kmp)的更多相关文章
- 二维KMP - 求字符矩阵的最小覆盖矩阵 - poj 2185
Milking Grid Problem's Link:http://poj.org/problem?id=2185 Mean: 给你一个n*m的字符矩阵,让你求这个字符矩阵的最小覆盖矩阵,输出这个最 ...
- Match:Milking Grid(二维KMP算法)(POJ 2185)
奶牛矩阵 题目大意:给定一个矩阵,要你找到一个最小的矩阵,这个矩阵的无限扩充的矩阵包含着原来的矩阵 思路:乍一看这一题确实很那做,因为我们不知道最小矩阵的位置,但是仔细一想,如果我们能把矩阵都放在左上 ...
- POJ 2185 - Milking Grid (二维KMP)
题意:给出一个字符矩形,问找到一个最小的字符矩形,令它无限复制之后包含原来的矩形. 此题用KMP+枚举来做. 一维的字符串匹配问题可以用KMP来解决.但是二维的就很难下手.我们可以将二维问题转化为一维 ...
- 题解报告:poj 2185 Milking Grid(二维kmp)
Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that ...
- POJ_2185_二维KMP
http://poj.org/problem?id=2185 求最小覆盖矩阵,把KMP扩展到二维,行一次,列一次,取最小覆盖线段相乘即可. #include<iostream> #incl ...
- POJ 1724 二维费用最短路
题目大意:有N个城市,编号1-N有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离 这里总是希望路 ...
- POJ 2185 Milking Grid KMP循环节周期
题目来源:id=2185" target="_blank">POJ 2185 Milking Grid 题意:至少要多少大的子矩阵 能够覆盖全图 比如例子 能够用一 ...
- POJ 2155 二维线段树 经典的记录所有修改再统一遍历 单点查询
本来是想找一个二维线段树涉及懒惰标记的,一看这个题,区间修改,单点查询,以为是懒惰标记,敲到一半发现这二维线段树就不适合懒惰标记,你更新了某段的某列,但其实其他段的相应列也要打标记,但因为区间不一样, ...
- POJ 2185 Milking Grid [二维KMP next数组]
传送门 直接转田神的了: Milking Grid Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6665 Accept ...
随机推荐
- 【转】terminal 快捷键
转自:http://www.jb51.net/os/Ubuntu/141723.html 1.gnome-terminal快捷键设置方法: 系统 —> 首选项 ->键盘快捷键 -> ...
- Android核心分析之十八Android电话系统之RIL-Java
Android RIL-Java 123.jpg (2.09 KB, 下载次数: 1) 下载附件 保存到相册 2012-3-21 10:47 上传 RIL-Java在本质上就是一个RIL代理,起 ...
- java jms
这篇博文我们主要介绍J2EE中的一个重要规范JMS,因为这个规范在企业中的应用十分的广泛,也比较重要,我们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤. 基本概念 JMS是java ...
- 性能标准:Apdex介绍
目前的应用程序性能测试工具有多方面的局限.每种工具都有其自己对性能的定义,产生太多混乱或矛盾的数值,并缺少简洁的结论.IT经理们无法深入了解性能,而这是软件与用户对关键应用的体验有关的事. 听云作为新 ...
- KETTLE、spoon使用
ETL是Extract”.“ Transform” .“Load”三个单词的首字母缩写分别代表了抽取.转换.装载.是数据仓库中重要的一环.ETL是数据的抽取清洗转换加载的过程,是数据进入数据仓库进行大 ...
- java 基本数据类型 回顾
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-004嵌套组件的注解AttributeOverrides
一.数据库 二.代码 1. package org.jpwh.model.advanced; import javax.persistence.AttributeOverride; import ja ...
- React的CSS
1.代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="U ...
- 309. Best Time to Buy and Sell Stock with Cooldown
题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...
- 在CentOS 7上给一个网卡分配多个IP地址
有时你也许想要给一个网卡多个地址.你该怎么做呢?另外买一个网卡来分配地址?在小型网络中其实不用这么做.我们现在可以在CentOS/RHEL 7中给一个网卡分配多个ip地址.想知道怎么做么?好的,跟随我 ...