POJ 2185 Milking Grid(KMP 经典)

2024-02-19 20:32
文章标签 经典 poj grid kmp milking 2185

本文主要是介绍POJ 2185 Milking Grid(KMP 经典),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://poj.org/problem?id=2185

这个题目其实难度不大,但是要想很顺利的做出来对kmp没有一定程度的理解还是不行的

这个题目要求的是一个最小的矩形然后看看这个矩形的字符串扩展能不能形成整个大的矩形

串,形成的大的矩形包含原来矩形也算

首先这个矩形一定是在左上角这个是没什么疑问的,下面就是求循环节了,这个怎么求呢

这里给出的方法是整体求kmp的next,利用kmp的next值来求循环节,直接n-next[n]所以

这里求的循环节的长度如果能被整个串长度正除,那么就是整个串的循环节,否则(其实

也是)这个求来的循环节的扩展包括整个串

这个题目在求next的时候求横着的next的时候将每一列看成一个整体,求列的next的时候

将行看成一个整体,这样求两次next求出循环节相乘就OK 了!

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
#define maxn 10010
char str[maxn][100];
int next[maxn],n,m;
bool equal_row(int i,int j){for(int k=0;k<n;k++)if(str[k][i]!=str[k][j])return false;return true;
}
bool equal_colunm(int i,int j){for(int k=0;k<m;k++)if(str[i][k]!=str[j][k])return false;return true;
}
int get_next_row(char *s){int i=0,j=-1;next[0]=-1;while(s[i]){if(j==-1 || equal_row(i,j))i++,j++,next[i]=j;elsej=next[j];}return m-next[m];
}
int get_next_colunm(int p){int i=0,j=-1;next[0]=-1;while(str[i][p]){if(j==-1 || equal_colunm(i,j))i++,j++,next[i]=j;elsej=next[j];}return n-next[n];
}
int main(){int i,j,k,ans1,ans2;while(scanf("%d%d",&n,&m)!=EOF){for(i=0;i<n;i++)scanf("%s",str[i]);for(i=0;i<100;i++)str[n][i]=0;ans1=get_next_row(str[0]);ans2=get_next_colunm(0);printf("%d\n",ans1*ans2);}return 0;
}


这篇关于POJ 2185 Milking Grid(KMP 经典)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/725874

相关文章

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

usaco 1.2 Milking Cows(类hash表)

第一种思路被卡了时间 到第二种思路的时候就觉得第一种思路太坑爹了 代码又长又臭还超时!! 第一种思路:我不知道为什么最后一组数据会被卡 超时超了0.2s左右 大概想法是 快排加一个遍历 先将开始时间按升序排好 然后开始遍历比较 1 若 下一个开始beg[i] 小于 tem_end 则说明本组数据与上组数据是在连续的一个区间 取max( ed[i],tem_end ) 2 反之 这个

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

poj 1511 Invitation Cards(spfa最短路)

题意是给你点与点之间的距离,求来回到点1的最短路中的边权和。 因为边很大,不能用原来的dijkstra什么的,所以用spfa来做。并且注意要用long long int 来存储。 稍微改了一下学长的模板。 stack stl 实现代码: #include<stdio.h>#include<stack>using namespace std;const int M

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int